home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 23 / Amiga Format AFCD23 (Feb 1998, Issue 107).iso / +look_here_1st!+ / reader_requests / alienbreed3d2 / cheesesauce / newtwotest.s < prev    next >
Text File  |  1997-11-28  |  146KB  |  10,068 lines

  1. CD32VER equ 0
  2.  
  3. maxscrdiv EQU 8
  4. max3ddiv EQU 5
  5. playerheight EQU 128*512
  6. playercrouched EQU 8*1024
  7. scrheight EQU 80
  8.  
  9. ; k/j/m
  10.  
  11. ; 4/8
  12. ; s/x
  13. ; b/n
  14.  
  15. xpos EQU 0    ;l
  16. zpos EQU 4    ;l
  17.  
  18. zsinval EQU 8    ;w
  19. zcosval EQU 10    ;w3
  20. ztox EQU 12    ;l
  21. xsinval EQU 16    ;w
  22. xcosval EQU 18    ;w
  23. xspd EQU 20    ;w
  24. zspd EQU 22    ;wd
  25. mapx EQU 24    ;b
  26. mapz EQU 25        ;b
  27. ;whichtile EQU 26 ;b
  28. xofflight EQU 28    ;w
  29. zofflight EQU 30        ;w88
  30. offlight EQU 32        ;w
  31. zlinestore EQU 34
  32. zlinedir EQU 38
  33. zposdir EQU 40
  34. zposstore EQU 42
  35. xdiststore EQU 44
  36. xdistdir EQU 46
  37. zwallfound EQU 48
  38. xlinestore EQU 50
  39. xlinedir EQU 54
  40. xposdir EQU 56
  41. xposstore EQU 58
  42. zdiststore EQU 60
  43. zdistdir EQU 62
  44. xwallfound EQU 64
  45.  
  46.  
  47. midoffset EQU 104*4*40
  48.  
  49.  
  50.  SECTION Scrn,CODE
  51. OpenLib         equ -552
  52. CloseLib        equ -414
  53.  
  54. INTREQ    equ    $09C
  55. INTENA    equ    $09A
  56. INTENAR    equ    $01C
  57. DMACON    equ    $096
  58.  
  59. SERPER    equ    $032
  60. SERDATR    equ    $018
  61. SERDAT    equ    $030
  62. vhposr        equ $006    
  63. vhposrl        equ $007 
  64.  
  65. bltcon0        equ $40 
  66. bltcon1        equ $42
  67. bltcpt        equ $48
  68. bltbpt        equ $4c
  69. bltapt        equ $50
  70. spr0ctl        equ $142
  71. spr1ctl        equ $14a
  72. spr2ctl        equ $152
  73. spr3ctl        equ $15a
  74. spr4ctl        equ $162
  75. spr5ctl        equ $16a
  76. spr6ctl        equ $172
  77. spr7ctl        equ $17a
  78. spr0pos        equ $140
  79. spr1pos        equ $148
  80. spr2pos        equ $150
  81. spr3pos        equ $158
  82. spr4pos        equ $160
  83. spr5pos        equ $168
  84. spr6pos        equ $170
  85. spr7pos        equ $178
  86. bltdpt         equ $54
  87. bltafwm        equ $44
  88. bltalwm        equ $46
  89. bltsize         equ $58
  90. bltcmod         equ $60
  91. bltbmod         equ $62
  92. bltamod         equ $64
  93. bltdmod         equ $66
  94. diwstart        equ $8e         ; Screen hardware registers.
  95. diwstop         equ $90
  96. ddfstart        equ $92
  97. ddfstop         equ $94
  98. bplcon0         equ $100
  99. bplcon1         equ $102
  100. col0            equ $180
  101. col1            equ $182
  102. col2        equ $184
  103. col3        equ $186
  104. col4        equ $188
  105. col5        equ $18a
  106. col6        equ $18c
  107. col7        equ $18e
  108. col8            equ $190
  109. col9            equ $192
  110. col10           equ $194
  111. col11           equ $196
  112. col12           equ $198
  113. col13           equ $19a
  114. dmacon        equ $96
  115. dmaconr        equ $002
  116. intenar        equ $01c
  117. intena        equ $09a
  118. intreq        equ $09c
  119. intreqr        equ $01e
  120. intreqrl    equ $01f
  121. bpl1pth         equ $e0
  122. bpl1ptl         equ $e2
  123. bpl2pth        equ $e4
  124. bpl2ptl        equ $e6
  125. bpl3pth        equ $e8
  126. bpl3ptl        equ $ea
  127. bpl4pth        equ $ec
  128. bpl4ptl        equ $ee
  129. bpl5pth        equ $f0
  130. bpl5ptl        equ $f2
  131. bpl6pth        equ $f4
  132. bpl6ptl        equ $f6
  133. bpl7pth        equ $f8
  134. bpl7ptl        equ $fa
  135. bpl8pth        equ $fc
  136. bpl8ptl        equ $fe
  137. spr0pth        equ $120
  138. spr0ptl        equ $122
  139. spr1pth        equ $124
  140. spr1ptl        equ $126
  141. spr2pth        equ $128
  142. spr2ptl        equ $12a
  143. spr3pth        equ $12c
  144. spr3ptl        equ $12e
  145. spr4pth        equ $130
  146. spr4ptl        equ $132
  147. spr5pth        equ $134
  148. spr5ptl        equ $136
  149. spr6pth        equ $138
  150. spr6ptl        equ $13a
  151. spr7pth        equ $13c
  152. spr7ptl        equ $13e
  153.  
  154. ; move.l #length,d0
  155. ; moveq.l #2,d1    ; chipmem
  156. ; move.l 4.w,a6
  157. ; jsr allocmem(a6) = -198
  158.  
  159. ; tst.l d0
  160. ; beq.s ohbugger
  161. ; move.l d0,memaddr
  162.  
  163.  
  164. ; move.l 4.w,a6
  165. ; move.l memaddr,a1
  166. ; move.l #size,d0
  167. ; jsr freemem(a6) =-210
  168.  
  169.  
  170. ** This waits for the blitter to finish before allowing program
  171. ** execution to continue.
  172.  
  173.  include "ab3:source/protsetupdecode"
  174.  
  175. SAVEREGS MACRO
  176.  movem.l d0-d7/a0-a6,-(a7)
  177.  ENDM
  178.  
  179. GETREGS MACRO
  180.  movem.l (a7)+,d0-d7/a0-a6
  181.  ENDM
  182.  
  183.  
  184. WB MACRO
  185. \@bf:
  186.  btst #6,dmaconr(a6)
  187.  bne.s \@bf
  188.  ENDM
  189.  
  190. *Another version for when a6 <> dff000
  191.  
  192. WBSLOW MACRO
  193. \@bf:
  194.  btst #6,$dff000+dmaconr
  195.  bne.s \@bf
  196.  ENDM
  197.  
  198. WT MACRO
  199. \@bf:
  200.  btst #6,(a3)
  201.  bne.s \@bd
  202.  rts
  203. \@bd: 
  204.  btst #4,(a0)
  205.  beq.s \@bf
  206.  ENDM
  207.  
  208. WTNOT MACRO
  209. \@bf:
  210.  btst #6,(a3)
  211.  bne.s \@bd
  212.  rts
  213. \@bd: 
  214.  btst #4,(a0)
  215.  bne.s \@bf
  216.  ENDM
  217.  
  218. **
  219.  
  220.  include "macros.i"
  221.  include "ab3:source/defs.i"
  222.  
  223.  move.w (a0)+,mors
  224.  
  225.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  226.  move.w #13,SERPER(a6)    ;19200 baud, 8 bits, no parity
  227.  
  228.  st GOURSEL
  229.  
  230.  clr.b PLR1KEYS
  231.  clr.b PLR1PATH
  232.  clr.b PLR1MOUSE
  233.  st PLR1JOY
  234.  clr.b PLR2KEYS
  235.  clr.b PLR2PATH
  236.  clr.b PLR2MOUSE
  237.  st PLR2JOY
  238.  
  239.  PRSDO
  240.  
  241.  move.l #2,d1    
  242.  move.l #10240*2,d0
  243.  move.l 4.w,a6
  244.  jsr -198(a6)
  245.  move.l d0,TEXTSCRN
  246.  move.w d0,TSPTl
  247.  swap d0
  248.  move.w d0,TSPTh
  249.  
  250.  move.l #nullspr,d0
  251.  move.w d0,txs0l
  252.  move.w d0,txs1l
  253.  move.w d0,txs2l
  254.  move.w d0,txs3l
  255.  move.w d0,txs4l
  256.  move.w d0,txs5l
  257.  move.w d0,txs6l
  258.  move.w d0,txs7l
  259.  swap d0
  260.  move.w d0,txs0h
  261.  move.w d0,txs1h
  262.  move.w d0,txs2h
  263.  move.w d0,txs3h
  264.  move.w d0,txs4h
  265.  move.w d0,txs5h
  266.  move.w d0,txs6h
  267.  move.w d0,txs7h 
  268.  
  269.  move.l #1,d1    
  270.  move.l #120000,d0
  271.  move.l 4.w,a6
  272.  jsr -198(a6)
  273.  move.l d0,LEVELDATA
  274.  
  275.  jsr START
  276.  
  277.  rts
  278.  
  279. * Load level into buffers.
  280.  clr.b doanything
  281.  
  282. ; DRAW TEXT SCREEN
  283.  
  284. TWEENTEXT:
  285.  
  286.  move.l #LEVELTEXT,a0
  287.  move.w PLOPT,d0
  288.  muls #82*16,d0
  289.  add.l d0,a0
  290.  
  291.  move.w #14,d7
  292.  move.w #0,d0
  293. DOWNTEXT:
  294.  move.l TEXTSCRN,a1
  295.  jsr DRAWLINEOFTEXT
  296.  addq #1,d0
  297.  add.w #82,a0
  298.  dbra d7,DOWNTEXT
  299.  rts
  300.  
  301. FONTADDRS:
  302.  dc.l ENDFONT0,CHARWIDTHS0
  303.  
  304. ENDFONT0:
  305.  incbin "endfont0"
  306. CHARWIDTHS0:
  307.  incbin "charwidths0"
  308.  
  309.  even
  310.  
  311. DRAWLINEOFTEXT:
  312.  movem.l d0/a0/d7,-(a7)
  313.  
  314.  muls #80*16,d0
  315.  add.l d0,a1    ; screen pointer
  316.  
  317.  move.l #FONTADDRS,a3
  318.  moveq #0,d0
  319.  move.b (a0)+,d0
  320.  move.l (a3,d0.w*8),a2
  321.  move.l 4(a3,d0.w*8),a3
  322.  
  323.  moveq #0,d1    ; width counter:
  324.  move.w #79,d6
  325.  tst.b (a0)+
  326.  beq.s NOTCENTRED
  327.  moveq #-1,d5
  328.  move.l a0,a4
  329.  moveq #0,d2
  330.  moveq #0,d3
  331.  move.w #79,d0    ; number of chars
  332. .addup:
  333.  addq #1,d5
  334.  move.b (a4)+,d2
  335.  move.b -32(a3,d2.w),d4
  336.  add.w d4,d3
  337.  cmp.b #32,d2
  338.  beq.s .DONTPUTIN
  339.  move.w d5,d6
  340.  move.w d3,d1
  341. .DONTPUTIN:
  342.  dbra d0,.addup
  343.  asr.w #1,d1
  344.  neg.w d1
  345.  add.w #320,d1    ; horiz pos of start x
  346.  
  347. NOTCENTRED:
  348.  move.w d6,d7
  349. DOACHAR:
  350.  moveq #0,d2
  351.  move.b (a0)+,d2
  352.  sub.w #32,d2
  353.  moveq #0,d6
  354.  move.b (a3,d2.w),d6
  355.  asl.w #5,d2
  356.  lea (a2,d2.w),a4    ; char font
  357. val SET 0
  358.  REPT 16
  359.  move.w (a4)+,d0
  360.  bfins d0,val(a1){d1:d6}
  361. val SET val+80
  362.  ENDR
  363.  add.w d6,d1
  364.  dbra d7,DOACHAR
  365.  movem.l (a7)+,d0/a0/d7
  366.  rts 
  367.  
  368.  
  369. CLRTWEENSCRN:
  370.  move.l TEXTSCRN,a0
  371.  move.w #(10240/16)-1,d0
  372.  move.l #$0,d1
  373. .lll
  374.  move.l d1,(a0)+
  375.  move.l d1,(a0)+
  376.  move.l d1,(a0)+
  377.  move.l d1,(a0)+
  378.  move.l d1,(a0)+
  379.  move.l d1,(a0)+
  380.  move.l d1,(a0)+
  381.  move.l d1,(a0)+
  382.  dbra d0,.lll
  383.  rts
  384.  
  385. PLAYTHEGAME:
  386.  
  387.  move.w #0,TXTCOLL
  388.  
  389.  bsr CLRTWEENSCRN
  390.  
  391.  cmp.b #'n',mors
  392.  bne.s .notext
  393.  bsr TWEENTEXT
  394. .notext
  395.  
  396.  move.l #TEXTCOP,$dff080
  397.  
  398.  move.w #$10,d0
  399.  move.w #7,d1
  400.  
  401. .fdup
  402.  move.w d0,TXTCOLL
  403.  add.w #$121,d0
  404. .wtframe:
  405.  btst #5,$dff000+intreqrl
  406.  beq.s .wtframe
  407.  move.w #$0020,$dff000+intreq
  408.  dbra d1,.fdup
  409.  
  410.  jsr INITCOPPERSCRN
  411.  
  412. ; Get level memory.
  413.  
  414.  
  415.  move.l #1,d1
  416.  move.l #50000,d0
  417.  move.l 4.w,a6
  418.  jsr -198(a6)
  419.  move.l d0,LEVELGRAPHICS
  420.  
  421.  move.l #1,d1
  422.  move.l #40000,d0
  423.  move.l 4.w,a6
  424.  jsr -198(a6)
  425.  move.l d0,LEVELCLIPS
  426.  
  427.  move.l #$dff000,a6
  428.  jsr SETPLAYERS
  429.  
  430. ; move.l #LEVELDATAD,LEVELDATA
  431. ; move.l #LEVELGRAPHICSD,LEVELGRAPHICS
  432. ; move.l #LEVELCLIPSD,LEVELCLIPS
  433.  
  434. ; bra noload
  435.  
  436.  move.l doslib,a6
  437.  move.l #LDname,d1
  438.  move.l #1005,d2
  439.  jsr -30(a6)
  440.  move.l d0,LDhandle
  441.  
  442.  move.l doslib,a6
  443.  move.l d0,d1
  444.  move.l LEVELCLIPS,d2
  445.  move.l #40000,d3
  446.  jsr -42(a6)
  447.  
  448.  move.l doslib,a6
  449.  move.l LDhandle,d1
  450.  jsr -36(a6)
  451.  
  452. *************************************
  453.     move.l    LEVELCLIPS,d0
  454.     moveq    #0,d1
  455.     move.l LEVELDATA,a0
  456.     lea    WorkSpace,a1
  457.     lea    $0,a2
  458.     jsr    unLHA
  459. *************************************
  460.  
  461. ********
  462.  
  463.  move.l doslib,a6
  464.  move.l #LGname,d1
  465.  move.l #1005,d2
  466.  jsr -30(a6)
  467.  move.l d0,LGhandle
  468.  
  469.  move.l doslib,a6
  470.  move.l d0,d1
  471.  move.l LEVELCLIPS,d2
  472.  move.l #40000,d3
  473.  jsr -42(a6)
  474.  
  475.  move.l doslib,a6
  476.  move.l LGhandle,d1
  477.  jsr -36(a6)
  478.  
  479. *************************************
  480.     move.l    LEVELCLIPS,d0
  481.     moveq    #0,d1
  482.     move.l LEVELGRAPHICS,a0
  483.     lea    WorkSpace,a1
  484.     lea    $0,a2
  485.     jsr    unLHA
  486. *************************************
  487.  
  488.  
  489. ********
  490.  
  491.  move.l doslib,a6
  492.  move.l #LCname,d1
  493.  move.l #1005,d2
  494.  jsr -30(a6)
  495.  move.l d0,LChandle
  496.  
  497.  move.l doslib,a6
  498.  move.l d0,d1
  499.  move.l #WorkSpace+16384,d2
  500.  move.l #16000,d3
  501.  jsr -42(a6)
  502.  
  503.  move.l doslib,a6
  504.  move.l LChandle,d1
  505.  jsr -36(a6)
  506.  
  507. *************************************
  508.     move.l    #WorkSpace+16384,d0
  509.     moveq    #0,d1
  510.     move.l LEVELCLIPS,a0
  511.     lea    WorkSpace,a1
  512.     lea    $0,a2
  513.     jsr    unLHA
  514. *************************************
  515.  
  516.  
  517. *******
  518.  
  519. noload:
  520.  
  521. ********
  522.  
  523. ; move.l doslib,a6
  524. ; move.l #Prefsname,d1
  525. ; move.l #1005,d2
  526. ; jsr -30(a6)
  527. ; move.l d0,Prefshandle
  528.  
  529. ; move.l doslib,a6
  530. ; move.l d0,d1
  531. ; move.l #Prefsfile,d2
  532. ; move.l #50,d3
  533. ; jsr -42(a6)
  534.  
  535. ; move.l doslib,a6
  536. ; move.l Prefshandle,d1
  537. ; jsr -36(a6)
  538.  
  539. *******
  540.  
  541.  cmp.b #'s',Prefsfile+2
  542.  seq STEREO
  543.  
  544.  move.l doslib,d0
  545.  move.l d0,a1
  546.  move.l 4.w,a6
  547.  jsr CloseLib(a6)
  548.  
  549.  move.l #$dff000,a6
  550.  move.w #$87c0,dmacon(a6)
  551.  move.w #$8020,dmacon(a6)
  552.  move.w intenar(a6),saveinters
  553.  move.w #$7fff,intena(a6)
  554.  move.w #$00ff,$dff09e
  555.  
  556. *** Put myself in supervisor mode
  557.  
  558.  bra blag
  559. ; move.l $6c,d0
  560. ; move.l #blag,$6c
  561. ; move.w #$8010,intreq(a6)
  562.  
  563.  rts
  564.  
  565. saveit: ds.l 10
  566. doslibname: dc.b 'dos.library',0
  567.  even
  568. doslib: dc.l 0
  569.  
  570. mors: dc.w 0
  571.  
  572. LDname: dc.b 'ab3:levels/level_'
  573. LEVA:
  574.  dc.b 'a/twolev.bin',0
  575.  even
  576. LDhandle: dc.l 0
  577. LGname: dc.b 'ab3:levels/level_'
  578. LEVB:
  579.  dc.b 'a/twolev.graph.bin',0
  580.  even
  581. LGhandle: dc.l 0
  582. LCname: dc.b 'ab3:levels/level_'
  583. LEVC:
  584.  dc.b 'a/twolev.clips',0
  585.  even
  586. LChandle: dc.l 0
  587.  
  588. Prefsname: dc.b 'ram:prefs',0
  589.  even
  590. Prefshandle: dc.l 0
  591.  
  592. Prefsfile:
  593.  dc.b 'k4nx'
  594.  ds.b 50
  595.  
  596.  even
  597.  
  598. blag:
  599. ; move.w #$10,intreq(a6)
  600. ; move.l d0,$6c
  601. ; move.w #$7fff,intena(a6)
  602.  
  603.  move.w #$20,$dff1dc
  604.  
  605.  move.l $6c,saveit
  606.  move.l #Chan0inter,$6c
  607.  
  608. ****************************
  609. * Initialize level
  610. ****************************
  611. * Poke all clip offsets into
  612. * correct bit of level data.
  613. ****************************
  614.  move.l LEVELGRAPHICS,a0
  615.  move.l 12(a0),a1
  616.  add.l a0,a1
  617.  move.l a1,ZoneGraphAdds
  618.  move.l (a0),a1
  619.  add.l a0,a1
  620.  move.l a1,DoorData
  621.  move.l 4(a0),a1
  622.  add.l a0,a1
  623.  move.l a1,LiftData
  624.  move.l 8(a0),a1
  625.  add.l a0,a1
  626.  move.l a1,SwitchData
  627.  adda.w #16,a0
  628.  move.l a0,ZoneAdds
  629.  
  630.  move.l LEVELDATA,a1
  631.  move.l 16+6(a1),a2
  632.  add.l a1,a2
  633.  move.l a2,Points
  634.  move.w 8+6(a1),d0
  635.  lea 4(a2,d0.w*4),a2
  636.  move.l a2,PointBrights
  637.  
  638.  move.l 20+6(a1),a2
  639.  add.l a1,a2
  640.  move.l a2,FloorLines
  641.  move.l 24+6(a1),a2
  642.  add.l a1,a2
  643.  move.l a2,ObjectData
  644. *****************************************
  645. * Just for charles
  646.  
  647. ; move.w #$6060,6(a2)
  648. ; move.l #$d0000,8(a2)
  649. ; sub.w #40,4(a2)
  650. ; move.w #45*256+45,14(a2)
  651. ****************************************
  652.  move.l 28+6(a1),a2
  653.  add.l a1,a2
  654.  move.l a2,PlayerShotData
  655.  move.l 32+6(a1),a2
  656.  add.l a1,a2
  657.  move.l a2,NastyShotData
  658.  
  659.  add.l #64*20,a2
  660.  move.l a2,OtherNastyData
  661.  
  662.  move.l 36+6(a1),a2
  663.  add.l a1,a2
  664.  move.l a2,ObjectPoints  
  665.  move.l 40+6(a1),a2
  666.  add.l a1,a2
  667.  move.l a2,PLR1_Obj
  668.  move.l 44+6(a1),a2
  669.  add.l a1,a2
  670.  move.l a2,PLR2_Obj
  671.  move.w 14+6(a1),NumObjectPoints
  672.  
  673. ; bra noclips
  674.   
  675.  move.l LEVELCLIPS,a2
  676.  moveq #0,d0
  677.  move.w 10+6(a1),d7    ;numzones
  678. assignclips:
  679.  move.l (a0)+,a3
  680.  add.l a1,a3    ; pointer to a zone
  681.  adda.w #ToListOfGraph,a3 ; pointer to zonelist
  682. dowholezone:
  683.  tst.w (a3)
  684.  blt.s nomorethiszone
  685.  tst.w 2(a3)
  686.  blt.s thisonenull
  687.  
  688.  move.l d0,d1
  689.  asr.l #1,d1
  690.  move.w d1,2(a3)
  691.  
  692. findnextclip:
  693.  cmp.w #-2,(a2,d0.l)
  694.  beq.s foundnextclip
  695.  addq.l #2,d0
  696.  bra.s findnextclip
  697. foundnextclip
  698.  addq.l #2,d0
  699.  
  700. thisonenull:
  701.  addq #8,a3 
  702.  bra.s dowholezone
  703. nomorethiszone:
  704.  dbra d7,assignclips
  705.  
  706.  lea (a2,d0.l),a2
  707.  move.l a2,CONNECT_TABLE
  708.  
  709. noclips:
  710.  
  711. * Put in addresses of glowything
  712.  
  713.  
  714. ************************************
  715.  
  716. ; cmp.b #'k',Prefsfile
  717. ; bne.s nkb
  718.  
  719. ;nkb:
  720. ; cmp.b #'m',Prefsfile
  721. ; bne.s nmc
  722. ; clr.b PLR1KEYS
  723. ; clr.b PLR1PATH
  724. ; st PLR1MOUSE
  725. ; clr.b PLR1JOY
  726. ;nmc:
  727. ; cmp.b #'j',Prefsfile
  728. ; bne.s njc
  729. ; clr.b PLR1KEYS
  730. ; clr.b PLR1PATH
  731. ; clr.b PLR1MOUSE
  732. ; st PLR1JOY
  733. ;njc:
  734.  
  735.  clr.b PLR1_StoodInTop
  736.  move.l #playerheight,PLR1s_height
  737.  
  738.  move.l #empty,pos1LEFT
  739.  move.l #empty,pos2LEFT
  740.  move.l #empty,pos1RIGHT
  741.  move.l #empty,pos2RIGHT
  742.  move.l #emptyend,Samp0endLEFT
  743.  move.l #emptyend,Samp1endLEFT
  744.  move.l #emptyend,Samp0endRIGHT
  745.  move.l #emptyend,Samp1endRIGHT
  746.  
  747.  move.l #nullspr,d0
  748.  move.w d0,s4l
  749.  move.w d0,s5l
  750.  move.w d0,s6l
  751.  move.w d0,s7l
  752.  swap d0
  753.  move.w d0,s4h
  754.  move.w d0,s5h
  755.  move.w d0,s6h
  756.  move.w d0,s7h 
  757.  
  758.  move.l #nullline,d0
  759.  move.w d0,n1l
  760.  swap d0
  761.  move.w d0,n1h
  762.  
  763.  move.l Panel,d0
  764.  move.w d0,p1l
  765.  swap d0
  766.  move.w d0,p1h
  767.  swap d0
  768.  add.l #40,d0
  769.  move.w d0,p2l
  770.  swap d0
  771.  move.w d0,p2h
  772.  swap d0
  773.  add.l #40,d0
  774.  move.w d0,p3l
  775.  swap d0
  776.  move.w d0,p3h
  777.  swap d0
  778.  add.l #40,d0
  779.  move.w d0,p4l
  780.  swap d0
  781.  move.w d0,p4h
  782.  swap d0
  783.  add.l #40,d0
  784.  move.w d0,p5l
  785.  swap d0
  786.  move.w d0,p5h
  787.  swap d0
  788.  add.l #40,d0
  789.  move.w d0,p6l
  790.  swap d0
  791.  move.w d0,p6h
  792.  swap d0
  793.  add.l #40,d0
  794.  move.w d0,p7l
  795.  swap d0
  796.  move.w d0,p7h
  797.  swap d0
  798.  add.l #40,d0
  799.  move.w d0,p8l
  800.  swap d0
  801.  move.w d0,p8h
  802.  
  803. *******************************
  804. * TIMER SCREEN SETUP
  805. ; move.l #TimerScr,d0
  806. ; move.w d0,p1l
  807. ; swap d0
  808. ; move.w d0,p1h
  809. ; move.w #$1201,Panelcon
  810.  
  811.  move.l #borders,d0
  812.  move.w d0,s0l
  813.  swap d0
  814.  move.w d0,s0h
  815.  move.l #borders+2592,d0
  816.  move.w d0,s1l
  817.  swap d0
  818.  move.w d0,s1h
  819.  move.l #borders+2592*2,d0
  820.  move.w d0,s2l
  821.  swap d0
  822.  move.w d0,s2h
  823.  move.l #borders+2592*3,d0
  824.  move.w d0,s3l
  825.  swap d0
  826.  move.w d0,s3h
  827.  
  828.  move.w #52*256+64,borders
  829.  move.w #212*256+0,borders+8
  830.  move.w #52*256+64,borders+2592
  831.  move.w #212*256+128,borders+8+2592
  832.  move.w #52*256+192,borders+2592*2
  833.  move.w #212*256+0,borders+8+2592*2
  834.  move.w #52*256+192,borders+2592*3
  835.  move.w #212*256+128,borders+8+2592*3
  836.  
  837.  move.l #FacePlace,d0
  838.  move.w d0,f1l
  839.  swap d0
  840.  move.w d0,f1h
  841.  move.l #FacePlace+32*24,d0
  842.  move.w d0,f2l
  843.  swap d0
  844.  move.w d0,f2h
  845.  move.l #FacePlace+32*24*2,d0
  846.  move.w d0,f3l
  847.  swap d0
  848.  move.w d0,f3h
  849.  move.l #FacePlace+32*24*3,d0
  850.  move.w d0,f4l
  851.  swap d0
  852.  move.w d0,f4h
  853.  move.l #FacePlace+32*24*4,d0
  854.  move.w d0,f5l
  855.  swap d0
  856.  move.w d0,f5h
  857.   
  858.  
  859.  move.l #bigfield,d0
  860.  move.w d0,ocl
  861.  swap d0
  862.  move.w d0,och
  863.  
  864.  bset.b #1,$bfe001
  865.  
  866. ; jmp stuff
  867. ;endstuff:
  868.  
  869.  move.w #$00ff,$dff09e
  870.  
  871. ; move.l #Blurbfield,$dff080
  872.  
  873.  move.w #0,d0
  874.  
  875.  move.l #scrn,d0
  876.  move.w d0,pl1l
  877.  swap d0
  878.  move.w d0,pl1h
  879.  
  880.  move.l #scrn+40,d0
  881.  move.w d0,pl2l
  882.  swap d0
  883.  move.w d0,pl2h
  884.  
  885.  move.l #scrn+80,d0
  886.  move.w d0,pl3l
  887.  swap d0
  888.  move.w d0,pl3h
  889.  
  890.  move.l #scrn+120,d0
  891.  move.w d0,pl4l
  892.  swap d0
  893.  move.w d0,pl4h
  894.  
  895.  move.l #scrn+160,d0
  896.  move.w d0,pl5l
  897.  swap d0
  898.  move.w d0,pl5h
  899.  
  900.  move.l #scrn+200,d0
  901.  move.w d0,pl6l
  902.  swap d0
  903.  move.w d0,pl6h
  904.  
  905.  move.l #scrn+240,d0
  906.  move.w d0,pl7l
  907.  swap d0
  908.  move.w d0,pl7h
  909.  
  910.  
  911. ****************************
  912.  jsr INITPLAYER
  913. ; bsr initobjpos
  914. ****************************
  915.  
  916.  
  917.  move.l #$dff000,a6
  918.  
  919.  move.l #null,$dff0a0
  920.  move.w #100,$dff0a4
  921.  move.w #443,$dff0a6
  922.  move.w #63,$dff0a8
  923.  
  924.  move.l #null2,$dff0b0
  925.  move.w #100,$dff0b4
  926.  move.w #443,$dff0b6
  927.  move.w #63,$dff0b8
  928.  
  929.  move.l #null4,$dff0c0
  930.  move.w #100,$dff0c4
  931.  move.w #443,$dff0c6
  932.  move.w #63,$dff0c8
  933.  
  934.  move.l #null3,$dff0d0
  935.  move.w #100,$dff0d4
  936.  move.w #443,$dff0d6
  937.  move.w #63,$dff0d8
  938.  
  939.  move.l #tab,a1
  940.  move.w #64,d7
  941.  move.w #0,d6
  942. outerlop
  943.  move.l #pretab,a0
  944.  move.w #255,d5
  945. scaledownlop:
  946.  move.b (a0)+,d0
  947.  ext.w d0
  948.  ext.l d0
  949.  muls d6,d0
  950.  asr.l #6,d0
  951.  move.b d0,(a1)+
  952.  dbra d5,scaledownlop
  953.  addq #1,d6
  954.  dbra d7,outerlop
  955.  
  956.  move.l #$dff000,a6
  957.  
  958.  move.w #$c018,intena(a6)
  959.  
  960.  move.w #$f,dmacon(a6)
  961.  move.w #$820f,dmacon(a6)
  962.  
  963. ; bsr protinit
  964.  
  965.  
  966. ; move.w #$20,$1dc(a6)
  967.  
  968.  move.w #$0,$dff034
  969.  move.w #0,Conditions
  970.  
  971.  cmp.b #'n',mors
  972.  beq.s .nokeys
  973.  move.w #%1111,Conditions
  974. .nokeys:
  975.  
  976.  move.l #KeyMap,a5
  977.  clr.b $45(a5)
  978.  
  979.  move.l #ingame,mt_data
  980.  clr.b UseAllChannels
  981.  
  982. ; cmp.b #'b',Prefsfile+3
  983. ; bne.s .noback
  984. ; jsr mt_init
  985. ;.noback:
  986. ;
  987. ; clr.b CHANNELDATA
  988. ; clr.b CHANNELDATA+8
  989. ; clr.b CHANNELDATA+16
  990. ; clr.b CHANNELDATA+24
  991. ;
  992. ; cmp.b #'b',Prefsfile+3
  993. ; bne.s noreserve
  994. ;
  995. ; st CHANNELDATA
  996. ; st CHANNELDATA+8
  997. ; st CHANNELDATA+16
  998. ; st CHANNELDATA+24
  999. ;noreserve: 
  1000.  
  1001. ; st CHANNELDATA
  1002. ; st CHANNELDATA+8
  1003.  
  1004.  move.l SampleList+6*8,pos0LEFT
  1005.  move.l SampleList+6*8+4,Samp0endLEFT
  1006.  move.l #playerheight,PLR1s_targheight
  1007.  move.l #playerheight,PLR1s_height
  1008.  move.l #playerheight,PLR2s_targheight
  1009.  move.l #playerheight,PLR2s_height
  1010.  
  1011. ; cmp.b #'n',mors
  1012. ; beq.s nohandshake
  1013. ;
  1014. ; move.b #%11011000,$bfd200
  1015. ; move.b #%00010000,$bfd000
  1016. ;waitloop:
  1017. ; btst.b #4,$bfd000
  1018. ; bne.s waitloop
  1019. ; move.b #%11000000,$bfd200
  1020.  
  1021. ;wtmouse:
  1022. ; btst #6,$bfe001
  1023. ; bne.s wtmouse
  1024.  
  1025. ;nohandshake:
  1026.  st doanything
  1027.  
  1028.  
  1029. ; jmp end
  1030.  
  1031.  move.l COPSCRN1,drawpt
  1032.  move.l COPSCRN2,olddrawpt
  1033.  
  1034.  jsr KInt_Init
  1035.  jsr CLEARKEYBOARD
  1036.  jsr MAKEBACKROUT
  1037.  
  1038.  clr.b MASTERQUITTING
  1039.  
  1040.  cmp.b #'n',mors
  1041.  seq SLAVEQUITTING
  1042.  
  1043.  move.w #127,PLR2_energy
  1044.  
  1045.  CACHE_FREEZE_OFF d2
  1046.  
  1047.  move.w #0,hitcol
  1048.  move.w #0,hitcol2
  1049.  
  1050.  cmp.b #'n',mors
  1051.  bne.s NOCLTXT
  1052.  
  1053.  move.b #0,lastpressed
  1054. .wtpress
  1055.  btst #6,$bfe001
  1056.  beq.s CLOSETXT
  1057.  btst #7,$bfe001
  1058.  beq.s CLOSETXT
  1059.  tst.b lastpressed
  1060.  beq.s .wtpress
  1061.  
  1062. CLOSETXT:
  1063.  
  1064.  move.w #$8f8,d0
  1065.  move.w #7,d1
  1066.  
  1067. .fdup
  1068.  move.w d0,TXTCOLL
  1069.  sub.w #$121,d0
  1070. .wtframe:
  1071.  btst #5,$dff000+intreqrl
  1072.  beq.s .wtframe
  1073.  move.w #$0020,$dff000+intreq
  1074.  dbra d1,.fdup
  1075.  
  1076.  move.w #0,TXTCOLL
  1077.  
  1078. NOCLTXT:
  1079.  
  1080.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1081.  
  1082. ***************************************************** 
  1083.  clr.b NASTY
  1084. **************************************************
  1085. lop:
  1086.  
  1087.  
  1088.  cmp.b #'n',mors
  1089.  bne .nopause
  1090.  
  1091.  move.l #KeyMap,a5
  1092.  tst.b $19(a5)
  1093.  beq.s .nopause
  1094.  clr.b doanything
  1095.  
  1096. .waitrel:
  1097.  tst.b $19(a5)
  1098.  bne.s .waitrel
  1099.  
  1100.  bsr PAUSEOPTS
  1101.  
  1102.  
  1103.  st doanything
  1104. .nopause: 
  1105.  
  1106.  st READCONTROLS
  1107.  move.l #$dff000,a6
  1108.  
  1109.  move.w hitcol,d0
  1110.  beq.s nofadedownhc
  1111.  sub.w #$100,d0
  1112.  move.w d0,hitcol
  1113.  move.w d0,hitcol2
  1114. nofadedownhc:
  1115.  
  1116.  cmp.b #'n',mors
  1117.  beq .nopause
  1118.  
  1119.  move.b SLAVEPAUSE,d0
  1120.  or.b MASTERPAUSE,d0
  1121.  beq.s .nopause
  1122.  clr.b doanything
  1123.  
  1124.  move.l #KeyMap,a5
  1125. .waitrel:
  1126.  tst.b $19(a5)
  1127.  bne.s .waitrel
  1128.  
  1129.  bsr PAUSEOPTS
  1130.  
  1131.  cmp.b #'m',mors
  1132.  bne.s .slavelast
  1133.  Jsr SENDFIRST
  1134.  bra .masfirst
  1135. .slavelast
  1136.  Jsr RECFIRST
  1137. .masfirst:
  1138.  clr.b SLAVEPAUSE
  1139.  clr.b MASTERPAUSE
  1140.  st doanything
  1141.  
  1142. .nopause: 
  1143.  
  1144.  
  1145.  
  1146.  move.l drawpt,d0
  1147.  move.l olddrawpt,drawpt
  1148.  move.l d0,olddrawpt
  1149.  move.l d0,$dff084    
  1150.  move.l drawpt,a3
  1151. ; move.l COPSCRNBUFF,a3
  1152.  adda.w #10,a3
  1153.  move.l a3,frompt
  1154.  add.l #104*4*40,a3
  1155.  move.l a3,midpt
  1156.  
  1157.  cmp.b #'s',mors
  1158.  beq.s nowaitslave
  1159.  
  1160. waitfortop:
  1161.  btst.b #0,intreqrl(a6)
  1162.  beq waitfortop
  1163.  move.w #$1,intreq(a6)
  1164.  move.l #PLR1_GunData,GunData
  1165.  move.b PLR1_GunSelected,GunSelected
  1166.  bra waitmaster
  1167.  
  1168. nowaitslave:
  1169.  move.l #PLR2_GunData,GunData
  1170.  move.b PLR2_GunSelected,GunSelected
  1171. waitmaster:
  1172.  
  1173.  
  1174.  move.l waterpt,a0
  1175.  move.l (a0)+,watertouse
  1176.  cmp.l #endwaterlist,a0
  1177.  blt.s okwat
  1178.  move.l #waterlist,a0
  1179. okwat:
  1180.  move.l a0,waterpt
  1181.  
  1182.  add.w #640,wtan
  1183.  and.w #8191,wtan
  1184.  add.w #1,wateroff
  1185.  and.w #63,wateroff
  1186.  
  1187.  move.l GunData,a6
  1188.  moveq #0,d0
  1189.  move.b GunSelected,d0
  1190.  lsl.w #2,d0
  1191.  lea (a6,d0.w*8),a6
  1192.  move.w (a6),d0
  1193.  asr.w #3,d0
  1194.  move.w d0,Ammo
  1195.  
  1196.  move.l PLR1_xoff,OLDX1
  1197.  move.l PLR1_zoff,OLDZ1
  1198.  move.l PLR2_xoff,OLDX2
  1199.  move.l PLR2_zoff,OLDZ2
  1200.  
  1201.  
  1202.  
  1203.  move.l #$dff000,a6
  1204.  
  1205.  cmp.b #'s',mors
  1206.  beq ASlaveShouldWaitOnHisMaster
  1207.  
  1208.  cmp.b #'n',mors
  1209.  bne NotOnePlayer
  1210.  
  1211.  move.w PLR1_energy,Energy
  1212.  move.w FramesToDraw,TempFrames
  1213.  cmp.w #15,TempFrames
  1214.  blt.s .okframe
  1215.  move.w #15,TempFrames
  1216. .okframe:
  1217.  move.w #0,FramesToDraw
  1218.  
  1219. *********************************************
  1220. *********** TAKE THIS OUT *******************
  1221. *********************************************
  1222.  
  1223.  move.l #KeyMap,a5
  1224.  tst.b (a5)
  1225.  beq.s .nocheat
  1226.  move.w #127,PLR1_energy
  1227.  bsr EnergyBar
  1228. .nocheat
  1229. **********************************************
  1230. **********************************************
  1231. **********************************************
  1232.  
  1233.  move.l PLR1s_xoff,p1_xoff
  1234.  move.l PLR1s_zoff,p1_zoff
  1235.  move.l PLR1s_yoff,p1_yoff
  1236.  move.l PLR1s_height,p1_height
  1237.  move.w PLR1s_angpos,p1_angpos
  1238.  move.w PLR1_bobble,p1_bobble
  1239.  move.b PLR1_clicked,p1_clicked
  1240.  move.b PLR1_fire,p1_fire
  1241.  clr.b PLR1_clicked
  1242.  move.b PLR1_SPCTAP,p1_spctap
  1243.  clr.b PLR1_SPCTAP
  1244.  move.b PLR1_Ducked,p1_ducked
  1245.  move.b PLR1_GunSelected,p1_gunselected
  1246.  
  1247.  bsr PLR1_Control
  1248.  
  1249.  move.l PLR1_Roompt,a0
  1250.  move.l ToZoneRoof(a0),SplitHeight
  1251.  move.w p1_xoff,THISPLRxoff
  1252.  move.w p1_zoff,THISPLRzoff
  1253.  
  1254.  
  1255.  move.l #$60000,p2_yoff
  1256.  move.l PLR2_Obj,a0
  1257.  move.w #-1,GraphicRoom(a0)
  1258.  move.w #-1,12(a0)
  1259.  move.b #0,17(a0)
  1260.  move.l #BollocksRoom,PLR2_Roompt
  1261.  
  1262.  bra donetalking
  1263.  
  1264. NotOnePlayer:
  1265.  move.l #KeyMap,a5
  1266.  tst.b $19(a5)
  1267.  sne MASTERPAUSE
  1268.  
  1269. *********************************
  1270.  move.w PLR1_energy,Energy
  1271. ; change this back
  1272. *********************************
  1273.  
  1274.  jsr SENDFIRST
  1275.  
  1276.  move.w FramesToDraw,TempFrames
  1277.  cmp.w #15,TempFrames
  1278.  blt.s .okframe
  1279.  move.w #15,TempFrames
  1280. .okframe:
  1281.  move.w #0,FramesToDraw
  1282.  
  1283.  move.l PLR1s_xoff,p1_xoff
  1284.  move.l PLR1s_zoff,p1_zoff
  1285.  move.l PLR1s_yoff,p1_yoff
  1286.  move.l PLR1s_height,p1_height
  1287.  move.w PLR1s_angpos,p1_angpos
  1288.  move.w PLR1_bobble,p1_bobble
  1289.  move.b PLR1_clicked,p1_clicked
  1290.  clr.b PLR1_clicked
  1291.  move.b PLR1_fire,p1_fire
  1292.  move.b PLR1_SPCTAP,p1_spctap
  1293.  clr.b PLR1_SPCTAP
  1294.  move.b PLR1_Ducked,p1_ducked
  1295.  move.b PLR1_GunSelected,p1_gunselected
  1296.  
  1297.  move.l p1_xoff,d0
  1298.  jsr SENDFIRST
  1299.  move.l d0,p2_xoff
  1300.  
  1301.  move.l p1_zoff,d0
  1302.  jsr SENDFIRST
  1303.  move.l d0,p2_zoff 
  1304.  
  1305.  move.l p1_yoff,d0
  1306.  jsr SENDFIRST
  1307.  move.l d0,p2_yoff
  1308.   
  1309.  move.l p1_height,d0
  1310.  jsr SENDFIRST
  1311.  move.l d0,p2_height
  1312.  
  1313.  move.w p1_angpos,d0
  1314.  swap d0
  1315.  move.w p1_bobble,d0
  1316.  jsr SENDFIRST
  1317.  move.w d0,p2_bobble
  1318.  swap d0
  1319.  move.w d0,p2_angpos
  1320.  
  1321.  
  1322.  move.w TempFrames,d0
  1323.  swap d0
  1324.  move.b p1_spctap,d0
  1325.  lsl.w #8,d0
  1326.  move.b p1_clicked,d0
  1327.  jsr SENDFIRST
  1328.  move.b d0,p2_clicked
  1329.  lsr.w #8,d0
  1330.  move.b d0,p2_spctap
  1331.  
  1332.  
  1333.  move.w Rand1,d0
  1334.  swap d0
  1335.  move.b p1_ducked,d0
  1336.  lsl.w #8,d0
  1337.  move.b p1_gunselected,d0
  1338.  jsr SENDFIRST
  1339.  move.b d0,p2_gunselected
  1340.  lsr.w #8,d0
  1341.  move.b d0,p2_ducked
  1342.  
  1343.  move.b p1_fire,d0
  1344.  lsl.w #8,d0
  1345.  move.b MASTERQUITTING,d0
  1346.  or.b d0,SLAVEQUITTING
  1347.  swap d0
  1348.  move.b MASTERPAUSE,d0
  1349.  or.b d0,SLAVEPAUSE
  1350.  jsr SENDFIRST
  1351.  or.b d0,MASTERPAUSE
  1352.  or.b d0,SLAVEPAUSE
  1353.  swap d0
  1354.  or.b d0,SLAVEQUITTING
  1355.  or.b d0,MASTERQUITTING
  1356.  lsr.w #8,d0
  1357.  move.b d0,p2_fire
  1358.  
  1359.  bsr PLR1_Control
  1360.  bsr PLR2_Control
  1361.  move.l PLR1_Roompt,a0
  1362.  move.l ToZoneRoof(a0),SplitHeight
  1363.  move.w p1_xoff,THISPLRxoff
  1364.  move.w p1_zoff,THISPLRzoff
  1365.  
  1366.  bra donetalking
  1367.  
  1368. ASlaveShouldWaitOnHisMaster:
  1369.  
  1370.  move.l #KeyMap,a5
  1371.  tst.b $19(a5)
  1372.  sne SLAVEPAUSE
  1373.  
  1374.  
  1375.  move.w PLR2_energy,Energy
  1376.  
  1377.  jsr RECFIRST
  1378.  
  1379.  move.l PLR2s_xoff,p2_xoff
  1380.  move.l PLR2s_zoff,p2_zoff
  1381.  move.l PLR2s_yoff,p2_yoff
  1382.  move.l PLR2s_height,p2_height
  1383.  move.w PLR2s_angpos,p2_angpos
  1384.  move.w PLR2_bobble,p2_bobble
  1385.  move.b PLR2_clicked,p2_clicked
  1386.  clr.b PLR2_clicked
  1387.  move.b PLR2_fire,p2_fire
  1388.  move.b PLR2_SPCTAP,p2_spctap
  1389.  clr.b PLR2_SPCTAP
  1390.  move.b PLR2_Ducked,p2_ducked
  1391.  move.b PLR2_GunSelected,p2_gunselected
  1392.  
  1393.  move.l p2_xoff,d0
  1394.  jsr RECFIRST
  1395.  move.l d0,p1_xoff
  1396.  
  1397.  move.l p2_zoff,d0
  1398.  jsr RECFIRST
  1399.  move.l d0,p1_zoff
  1400.  
  1401.  move.l p2_yoff,d0
  1402.  jsr RECFIRST
  1403.  move.l d0,p1_yoff
  1404.  
  1405.  move.l p2_height,d0
  1406.  jsr RECFIRST
  1407.  move.l d0,p1_height
  1408.  
  1409.  move.w p2_angpos,d0
  1410.  swap d0
  1411.  move.w p2_bobble,d0
  1412.  jsr RECFIRST
  1413.  move.w d0,p1_bobble
  1414.  swap d0
  1415.  move.w d0,p1_angpos
  1416.  
  1417.  
  1418.  move.b p2_spctap,d0
  1419.  lsl.w #8,d0
  1420.  move.b p2_clicked,d0
  1421.  jsr RECFIRST
  1422.  move.b d0,p1_clicked
  1423.  lsr.w #8,d0
  1424.  move.b d0,p1_spctap
  1425.  swap d0
  1426.  move.w d0,TempFrames
  1427.  
  1428.  
  1429.  move.b p2_ducked,d0
  1430.  lsl.w #8,d0
  1431.  move.b p2_gunselected,d0
  1432.  jsr RECFIRST
  1433.  move.b d0,p1_gunselected
  1434.  lsr.w #8,d0
  1435.  move.b d0,p1_ducked
  1436.  swap d0
  1437.  move.w d0,Rand1
  1438.  
  1439.  move.b p2_fire,d0
  1440.  lsl.w #8,d0
  1441.  move.b SLAVEQUITTING,d0
  1442.  or.b d0,MASTERQUITTING
  1443.  swap d0
  1444.  move.b SLAVEPAUSE,d0
  1445.  or.b d0,MASTERPAUSE
  1446.  jsr RECFIRST
  1447.  or.b d0,MASTERPAUSE
  1448.  or.b d0,SLAVEPAUSE
  1449.  swap d0
  1450.  or.b d0,SLAVEQUITTING
  1451.  or.b d0,MASTERQUITTING
  1452.  lsr.w #8,d0
  1453.  move.b d0,p1_fire
  1454.  
  1455.  
  1456.  bsr PLR1_Control
  1457.  bsr PLR2_Control
  1458.  move.w p2_xoff,THISPLRxoff
  1459.  move.w p2_zoff,THISPLRzoff
  1460.  move.l PLR2_Roompt,a0
  1461.  move.l ToZoneRoof(a0),SplitHeight
  1462.  
  1463. donetalking:
  1464.  
  1465.  
  1466.  
  1467.  
  1468.  move.l #ZoneBrightTable,a1
  1469.  move.l ZoneAdds,a2
  1470.  move.l PLR2_ListOfGraphRooms,a0
  1471.  move.l PLR2_PointsToRotatePtr,a5
  1472.  cmp.b #'s',mors
  1473.  beq.s doallz
  1474.  move.l PLR1_ListOfGraphRooms,a0
  1475.  move.l PLR1_PointsToRotatePtr,a5
  1476.  
  1477. doallz
  1478.  move.w (a0),d0
  1479.  blt.s doneallz
  1480.  add.w #8,a0
  1481.  
  1482.  move.l (a2,d0.w*4),a3
  1483.  add.l LEVELDATA,a3
  1484.  move.w ToZoneBrightness(a3),d2
  1485.  
  1486.  blt.s justbright
  1487.  move.w d2,d3
  1488.  lsr.w #8,d3
  1489.  tst.b d3
  1490.  beq.s justbright
  1491.  
  1492.  move.l #BrightAnimTable,a4
  1493.  move.w -2(a4,d3.w*2),d2
  1494.  
  1495. justbright:
  1496.  move.w d2,(a1,d0.w*4)
  1497.  
  1498.  move.w ToUpperBrightness(a3),d2
  1499.  
  1500.  blt.s justbright2
  1501.  move.w d2,d3
  1502.  lsr.w #8,d3
  1503.  tst.b d3
  1504.  beq.s justbright2
  1505.  
  1506.  move.l #BrightAnimTable,a4
  1507.  move.w -2(a4,d3.w*2),d2
  1508.  
  1509. justbright2:
  1510.  move.w d2,2(a1,d0.w*4)
  1511.  
  1512.  bra doallz
  1513.  
  1514. doneallz:
  1515.  
  1516.  move.l PointBrights,a2
  1517.  move.l #CurrentPointBrights,a3
  1518. justtheone:
  1519.  move.w (a5)+,d0
  1520.  blt.s whythehell
  1521.  move.w (a2,d0.w*4),d2
  1522.  
  1523.  tst.b d2
  1524.  blt.s .justbright
  1525.  move.w d2,d3
  1526.  lsr.w #8,d3
  1527.  tst.b d3
  1528.  beq.s .justbright
  1529.  
  1530.  move.w d3,d4
  1531.  and.w #$f,d3
  1532.  lsr.w #4,d4
  1533.  add.w #1,d4
  1534.  
  1535.  move.l #BrightAnimTable,a0
  1536.  move.w -2(a0,d3.w*2),d3
  1537.  ext.w d2
  1538.  sub.w d2,d3
  1539.  muls d4,d3
  1540.  asr.w #4,d3
  1541.  add.w d3,d2
  1542.  
  1543. .justbright:
  1544.  ext.w d2
  1545.  
  1546.  move.w d2,(a3,d0.w*4)
  1547.  move.w 2(a2,d0.w*4),d2
  1548.  
  1549.  tst.b d2
  1550.  blt.s .justbright2
  1551.  move.w d2,d3
  1552.  lsr.w #8,d3
  1553.  tst.b d3
  1554.  beq.s .justbright2
  1555.  
  1556.  move.w d3,d4
  1557.  and.w #$f,d3
  1558.  lsr.w #4,d4
  1559.  add.w #1,d4
  1560.  
  1561.  move.l #BrightAnimTable,a0
  1562.  move.w -2(a0,d3.w*2),d3
  1563.  ext.w d2
  1564.  sub.w d2,d3
  1565.  muls d4,d3
  1566.  asr.w #4,d3
  1567.  add.w d3,d2
  1568.  
  1569. .justbright2:
  1570.  ext.w d2
  1571.  
  1572.  move.w d2,2(a3,d0.w*4)
  1573.  
  1574.  bra.s justtheone
  1575.  
  1576. whythehell:
  1577.  
  1578.  cmp.b #'n',mors
  1579.  beq nosee
  1580.  
  1581.  move.l PLR1_Roompt,FromRoom
  1582.  move.l PLR2_Roompt,ToRoom
  1583.  move.w p1_xoff,Viewerx
  1584.  move.w p1_zoff,Viewerz
  1585.  move.l p1_yoff,d0
  1586.  asr.l #7,d0
  1587.  move.w d0,Viewery
  1588.  move.w p2_xoff,Targetx
  1589.  move.w p2_zoff,Targetz
  1590.  move.l p2_yoff,d0
  1591.  asr.l #7,d0
  1592.  move.w d0,Targety
  1593.  move.b PLR1_StoodInTop,ViewerTop
  1594.  move.b PLR2_StoodInTop,TargetTop
  1595.  jsr CanItBeSeen
  1596.  
  1597.  move.l PLR1_Obj,a0
  1598.  move.b CanSee,d0
  1599.  and.b #2,d0
  1600.  move.b d0,17(a0)
  1601.  move.l PLR2_Obj,a0
  1602.  move.b CanSee,d0
  1603.  and.b #1,d0
  1604.  move.b d0,17(a0)
  1605.  
  1606. nosee:
  1607.  
  1608.  move.l PLR1_Obj,a0
  1609.  move.b #5,16(a0)
  1610.  move.l PLR2_Obj,a0
  1611.  move.b #11,16(a0)
  1612.  
  1613.  move.w TempFrames,d0
  1614.  add.w d0,p1_holddown
  1615.  cmp.w #30,p1_holddown
  1616.  blt.s oklength
  1617.  move.w #30,p1_holddown
  1618. oklength:
  1619.  
  1620.  tst.b p1_fire
  1621.  bne.s okstillheld
  1622.  sub.w d0,p1_holddown
  1623.  bge.s okstillheld
  1624.  move.w #0,p1_holddown
  1625.  
  1626. okstillheld:
  1627.  
  1628.  move.w TempFrames,d0
  1629.  add.w d0,p2_holddown
  1630.  
  1631.  cmp.w #30,p2_holddown
  1632.  blt.s oklength2
  1633.  move.w #30,p2_holddown
  1634. oklength2:
  1635.  
  1636.  
  1637.  tst.b p2_fire
  1638.  bne.s okstillheld2
  1639.  sub.w d0,p2_holddown
  1640.  bge.s okstillheld2
  1641.  move.w #0,p2_holddown
  1642. okstillheld2:
  1643.  
  1644. ; move.l #PLR1_GunData,a1
  1645. ; move.w p1_holddown,d0
  1646. ; move.w #50,10+32*3(a1)
  1647. ; move.l #PLR2_GunData,a1
  1648. ; move.w p2_holddown,d0
  1649. ; move.w #50,10+32*3(a1)
  1650.  
  1651.  
  1652. ******************************************
  1653. ******************************************
  1654.  
  1655.  move.w TempFrames,d1
  1656.  bgt.s noze
  1657.  moveq #1,d1
  1658. noze:
  1659.  
  1660.  move.w PLR1_xoff,d0
  1661.  sub.w OLDX1,d0
  1662.  asl.w #4,d0
  1663.  ext.l d0
  1664.  divs d1,d0
  1665.  move.w d0,XDIFF1
  1666.  move.w PLR2_xoff,d0
  1667.  sub.w OLDX2,d0
  1668.  asl.w #4,d0
  1669.  ext.l d0
  1670.  divs d1,d0
  1671.  move.w d0,XDIFF2
  1672.  move.w PLR1_zoff,d0
  1673.  sub.w OLDZ1,d0
  1674.  asl.w #4,d0
  1675.  ext.l d0
  1676.  divs d1,d0
  1677.  move.w d0,ZDIFF1
  1678.  move.w PLR2_zoff,d0
  1679.  sub.w OLDZ2,d0
  1680.  asl.w #4,d0
  1681.  ext.l d0
  1682.  divs d1,d0
  1683.  move.w d0,ZDIFF2
  1684.  
  1685.  cmp.b #'s',mors
  1686.  beq.s ImPlayer2OhYesIAm
  1687.  bsr USEPLR1
  1688.  bra IWasPlayer1
  1689.  
  1690. ImPlayer2OhYesIAm:
  1691.  bsr USEPLR2
  1692. IWasPlayer1:
  1693.  
  1694.  
  1695.  cmp.b #'s',mors
  1696.  beq drawplayer2
  1697.  
  1698.  move.w #0,scaleval
  1699.  
  1700.  move.l PLR1_xoff,xoff
  1701.  move.l PLR1_yoff,yoff
  1702.  move.l PLR1_zoff,zoff
  1703.  move.w PLR1_angpos,angpos
  1704.  move.w PLR1_cosval,cosval
  1705.  move.w PLR1_sinval,sinval
  1706.  
  1707.  
  1708.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  1709.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  1710.  move.l PLR1_Roompt,Roompt
  1711.  
  1712.  bsr OrderZones
  1713.  jsr objmoveanim
  1714.  bsr EnergyBar
  1715.  bsr AmmoBar
  1716.  
  1717.  move.w #0,leftclip
  1718.  move.w #96,rightclip
  1719.  move.w #0,deftopclip
  1720.  
  1721.  move.w #79,defbotclip
  1722.  move.w #0,topclip
  1723.  move.w #79,botclip
  1724. ; sub.l #10*104*4,frompt
  1725. ; sub.l #10*104*4,midpt
  1726.  
  1727. * Subroom loop
  1728.  
  1729.  
  1730.  bsr DrawDisplay 
  1731.  
  1732.  bra nodrawp2
  1733.  
  1734. drawplayer2
  1735.  
  1736.  move.w #0,scaleval
  1737.  move.l PLR2_xoff,xoff
  1738.  move.l PLR2_yoff,yoff
  1739.  move.l PLR2_zoff,zoff
  1740.  move.w PLR2_angpos,angpos
  1741.  move.w PLR2_cosval,cosval
  1742.  move.w PLR2_sinval,sinval 
  1743.  
  1744.  
  1745.  
  1746.  move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
  1747.  move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
  1748.  move.l PLR2_Roompt,Roompt
  1749.  
  1750.  bsr OrderZones
  1751.  jsr objmoveanim
  1752.  bsr EnergyBar
  1753.  bsr AmmoBar
  1754.  
  1755.  move.w #0,leftclip
  1756.  move.w #96,rightclip
  1757.  move.w #0,deftopclip
  1758.  move.w #79,defbotclip
  1759.  move.w #0,topclip
  1760.  move.w #79,botclip
  1761.  
  1762.  bsr DrawDisplay
  1763.  
  1764. nodrawp2:
  1765.  
  1766. ***************************************** 
  1767. * Copy from copbuff to chip ram
  1768.  
  1769.  
  1770. ; move.l drawpt,a3
  1771. ; adda.w #10,a3
  1772. ; move.l COPSCRNBUFF,a2
  1773. ; move.w #2,d6
  1774. ; adda.w #10,a2
  1775. ;COPYOUT
  1776. ; move.w #31,d0
  1777. ;COPYDOWN1:
  1778. ; move.w #3,d1
  1779. ; move.l a2,a4
  1780. ; move.l a3,a5
  1781. ;.inlop1:
  1782. ;val SET 0
  1783. ; REPT 20
  1784. ; move.w val(a4),val(a5)
  1785. ;val SET val+104*4
  1786. ; ENDR
  1787. ; adda.l #104*4*20,a4
  1788. ; adda.l #104*4*20,a5
  1789. ; dbra d1,.inlop1
  1790. ; addq #4,a2
  1791. ; addq #4,a3
  1792. ; dbra d0,COPYDOWN1
  1793. ; addq #4,a2
  1794. ; addq #4,a3
  1795. ; dbra d6,COPYOUT 
  1796.  
  1797.  
  1798. ***************************************** 
  1799.  move.l PLR2_Roompt,a0
  1800.  move.l #WorkSpace,a1
  1801.  clr.l (a1)
  1802.  clr.l 4(a1)
  1803.  clr.l 8(a1)
  1804.  clr.l 12(a1)
  1805.  clr.l 16(a1)
  1806.  clr.l 20(a1)
  1807.  clr.l 24(a1)
  1808.  clr.l 28(a1)
  1809.  
  1810.  cmp.b #'n',mors
  1811.  beq.s plr1only
  1812.  
  1813.  lea ToListOfGraph(a0),a0
  1814. .doallrooms:
  1815.  move.w (a0),d0
  1816.  blt.s .allroomsdone
  1817.  addq #8,a0
  1818.  move.w d0,d1
  1819.  asr.w #3,d0
  1820.  bset d1,(a1,d0.w)
  1821.  bra .doallrooms
  1822. .allroomsdone:
  1823.  
  1824. plr1only:
  1825.  
  1826.  move.l PLR1_Roompt,a0
  1827.  lea ToListOfGraph(a0),a0
  1828. .doallrooms2:
  1829.  move.w (a0),d0
  1830.  blt.s .allroomsdone2
  1831.  addq #8,a0
  1832.  move.w d0,d1
  1833.  asr.w #3,d0
  1834.  bset d1,(a1,d0.w)
  1835.  bra .doallrooms2
  1836. .allroomsdone2:
  1837.  
  1838.  move.l ObjectData,a0
  1839.  sub.w #64,a0
  1840. .doallobs:
  1841.  add.w #64,a0
  1842.  move.w (a0),d0
  1843.  blt.s .allobsdone
  1844.  move.w 12(a0),d0
  1845.  blt.s .doallobs
  1846.  move.w d0,d1
  1847.  asr.w #3,d0
  1848.  btst d1,(a1,d0.w)
  1849.  beq.s .doallobs
  1850.  or.b #127,worry(a0)
  1851.  bra.s .doallobs
  1852. .allobsdone:
  1853.  
  1854.  
  1855.  
  1856. ; move.l #brightentab,a0
  1857. ; move.l frompt,a3
  1858. ; adda.w #(4*33)+(104*4*20),a3
  1859. ; move.w #20,d7
  1860. ; move.w #20,d6
  1861. ;horl:
  1862. ; move.w d6,d5
  1863. ; move.l a3,a1
  1864. ;vertl
  1865. ; move.w (a1),d0
  1866. ; move.w (a0,d0.w*2),(a1)
  1867. ; addq #4,a1
  1868. ; dbra d5,vertl
  1869. ; adda.w #104*4,a3
  1870. ; dbra d7,horl
  1871.  
  1872.  move.l #$dff000,a6
  1873.  
  1874. ; move.w #$300,col0(a6)
  1875.  
  1876.  move.l #KeyMap,a5
  1877.  tst.b $45(a5)
  1878.  beq.s noend
  1879.  
  1880.  cmp.b #'s',mors
  1881.  beq plr2quit 
  1882.  
  1883.  st MASTERQUITTING
  1884.  bra noend
  1885.  
  1886. plr2quit:
  1887.  st SLAVEQUITTING
  1888. noend:
  1889.  
  1890.  tst.b MASTERQUITTING
  1891.  beq.s .noquit
  1892.  tst.b SLAVEQUITTING
  1893.  bne endnomusic
  1894. .noquit
  1895.  
  1896.  move.l PLR1_Roompt,a0
  1897.  move.w (a0),d0
  1898.  move.w PLOPT,d1
  1899.  move.l #ENDZONES,a0
  1900.  cmp.w (a0,d1.w*2),d0
  1901.  beq end
  1902.  
  1903.  tst.w PLR1_energy
  1904.  ble end
  1905.  tst.w PLR2_energy
  1906.  ble end
  1907.  
  1908. ; move.l SwitchData,a0
  1909. ; tst.b 24+8(a0)
  1910. ; bne end
  1911.   
  1912.  JSR STOPTIMER
  1913.  
  1914.  bra lop
  1915.  
  1916. MASTERQUITTING: dc.b 0
  1917. SLAVEQUITTING: dc.b 0
  1918. MASTERPAUSE: dc.b 0
  1919. SLAVEPAUSE: dc.b 0
  1920.  
  1921. PAUSEOPTS:
  1922.  include "ab3:source/pauseopts"
  1923.  
  1924. ENDZONES:
  1925. ; LEVEL 1
  1926.  dc.w 132
  1927. ; LEVEL 2
  1928.  dc.w 149
  1929. ; LEVEL 3
  1930.  dc.w 155
  1931. ; LEVEL 4
  1932.  dc.w 107
  1933. ; LEVEL 5
  1934.  dc.w 67
  1935. ; LEVEL 6
  1936.  dc.w 132
  1937. ; LEVEL 7
  1938.  dc.w 203
  1939. ; LEVEL 8
  1940.  dc.w 166
  1941. ; LEVEL 9
  1942.  dc.w 118
  1943. ; LEVEL 10
  1944.  dc.w 102
  1945. ; LEVEL 11
  1946.  dc.w 103
  1947. ; LEVEL 12
  1948.  dc.w 2
  1949. ; LEVEL 13
  1950.  dc.w 98
  1951. ; LEVEL 14
  1952.  dc.w 0
  1953. ; LEVEL 15
  1954.  dc.w 148
  1955. ; LEVEL 16
  1956.  dc.w 103
  1957.  
  1958. ***************************************************************************
  1959. ***************************************************************************
  1960. ****************** End of Main Loop here ********************************** 
  1961. ***************************************************************************
  1962. ***************************************************************************
  1963.  
  1964. putinsmallscr:
  1965.  move.l #$1fe0000,statskip
  1966.  move.l #$1fe0000,statskip+4
  1967.  
  1968.  move.l #healthpal,a5
  1969.  move.l COPSCRN1,a0
  1970.  move.l COPSCRN2,a2
  1971.  move.w #scrheight-1,d0
  1972.  move.l #0,d6
  1973.  move.w #0,d3
  1974.  move.w #$2bdf,startwait
  1975.  move.w #$2d01,endwait
  1976. .fillcop
  1977.  move.w #$180,d1
  1978.  
  1979.  move.l a0,a1
  1980.  move.l a2,a3
  1981.  move.w #$10c,(a1)+
  1982.  move.w #$10c,(a3)+
  1983.  move.w d3,(a1)+
  1984.  move.w d3,(a3)+
  1985.  eor.w #$8000,d3
  1986.  
  1987.  move.w #$106,(a1)+
  1988.  move.w #$106,(a3)+
  1989.  move.w #$2c42,d5
  1990.  or.w d3,d5
  1991.  and.w #$fffe,d5
  1992.  move.w d5,(a1)+
  1993.  move.w d5,(a3)+
  1994.  bsr do32
  1995.  
  1996.  move.w #$106,(a1)+
  1997.  move.w #$106,(a3)+
  1998.  move.w #$4c42,d5
  1999.  or.w d3,d5
  2000.  and.w #$fffe,d5
  2001.  move.w d5,(a1)+
  2002.  move.w d5,(a3)+
  2003.  bsr do32
  2004.  
  2005.  move.w #$106,(a1)+
  2006.  move.w #$106,(a3)+
  2007.  move.w #$6c42,d5
  2008.  or.w d3,d5
  2009.  and.w #$fffe,d5
  2010.  move.w d5,(a1)+
  2011.  move.w d5,(a3)+
  2012.  bsr do32
  2013.  
  2014.  
  2015.  move.l #$1060c42,(a1)+
  2016.  move.l #$1060c42,(a3)+
  2017.  move.w #$19e,(a1)+
  2018.  move.w (a5),(a1)+
  2019.  move.w #$19e,(a3)+
  2020.  move.w (a5)+,(a3)+
  2021.  
  2022. **********************************
  2023.  
  2024.  adda.w #104*4,a0
  2025.  adda.w #104*4,a2
  2026.  dbra d0,.fillcop
  2027.  
  2028.  move.w #$48,fetchstart
  2029.  move.w #$88,fetchstop
  2030.  move.w #$2cb1,winstart
  2031.  move.w #$2c91,winstop
  2032.  move.w #-24,modulo
  2033.  move.w #-24,modulo+4
  2034.  
  2035.  move.l #nullspr,d0
  2036.  move.w d0,s4l
  2037.  move.w d0,s5l
  2038.  move.w d0,s6l
  2039.  move.w d0,s7l
  2040.  swap d0
  2041.  move.w d0,s4h
  2042.  move.w d0,s5h
  2043.  move.w d0,s6h
  2044.  move.w d0,s7h 
  2045.  
  2046.  move.l #borders,d0
  2047.  move.w d0,s0l
  2048.  swap d0
  2049.  move.w d0,s0h
  2050.  move.l #borders+2592,d0
  2051.  move.w d0,s1l
  2052.  swap d0
  2053.  move.w d0,s1h
  2054.  move.l #borders+2592*2,d0
  2055.  move.w d0,s2l
  2056.  swap d0
  2057.  move.w d0,s2h
  2058.  move.l #borders+2592*3,d0
  2059.  move.w d0,s3l
  2060.  swap d0
  2061.  move.w d0,s3h
  2062.  
  2063.  
  2064.  move.l #scrn+40,a0
  2065.  move.l #scrn+160,a1
  2066.  move.l #scrn+280,a2
  2067.  move.l #smallscrntab,a3
  2068.  move.w #191,d7    ; counter
  2069.  move.w #0,d1    ; xpos
  2070. .plotscrnloop:
  2071.  move.b (a3)+,d0
  2072.  move.w d1,d2
  2073.  asr.w #3,d2
  2074.  move.b d1,d3
  2075.  not.b d3
  2076.  bclr.b d3,-40(a0,d2.w)
  2077.  bclr.b d3,(a0,d2.w)
  2078.  bclr.b d3,40(a0,d2.w)
  2079.  bclr.b d3,-40(a1,d2.w)
  2080.  bclr.b d3,(a1,d2.w)
  2081.  bclr.b d3,40(a1,d2.w)
  2082.  bclr.b d3,-40(a2,d2.w)
  2083.  btst #0,d0
  2084.  beq.s .nobp1
  2085.  bset.b d3,-40(a0,d2.w)
  2086. .nobp1:
  2087.  btst #1,d0
  2088.  beq.s .nobp2
  2089.  bset.b d3,(a0,d2.w)
  2090. .nobp2:
  2091.  btst #2,d0
  2092.  beq.s .nobp3
  2093.  bset.b d3,40(a0,d2.w)
  2094. .nobp3:
  2095.  btst #3,d0
  2096.  beq.s .nobp4
  2097.  bset.b d3,-40(a1,d2.w)
  2098. .nobp4:
  2099.  btst #4,d0
  2100.  beq.s .nobp5
  2101.  bset.b d3,(a1,d2.w)
  2102. .nobp5:
  2103.  btst #5,d0
  2104.  beq.s .nobp6
  2105.  bset.b d3,40(a1,d2.w)
  2106. .nobp6:
  2107.  btst #6,d0
  2108.  beq.s .nobp7
  2109.  bset.b d3,-40(a2,d2.w)
  2110. .nobp7:
  2111.  
  2112.  addq #1,d1
  2113.  
  2114.  dbra d7,.plotscrnloop
  2115.  
  2116.  
  2117.  rts
  2118.  
  2119. putinlargescr:
  2120.  
  2121.  move.l #$1000000,statskip
  2122.  move.l #$fffffffe,statskip+4
  2123.  
  2124.  move.l #healthpal,a5
  2125.  move.l COPSCRN1,a0
  2126.  move.l COPSCRN2,a2
  2127.  move.w #scrheight-1,d0
  2128.  move.l #0,d6
  2129.  move.w #0,d3
  2130.  move.w #$29df,startwait
  2131.  move.w #$2b01,endwait
  2132. .fillcop
  2133.  move.w #$180,d1
  2134.  
  2135.  move.l a0,a1
  2136.  move.l a2,a3
  2137.  move.w #$10c,(a1)+
  2138.  move.w #$10c,(a3)+
  2139.  move.w d3,(a1)+
  2140.  move.w d3,(a3)+
  2141.  eor.w #$8000,d3
  2142.  
  2143.  move.w #$106,(a1)+
  2144.  move.w #$106,(a3)+
  2145.  move.w #$2c42,d5
  2146.  or.w d3,d5
  2147.  and.w #$fffe,d5
  2148.  move.w d5,(a1)+
  2149.  move.w d5,(a3)+
  2150.  bsr do32
  2151.  
  2152.  move.w #$106,(a1)+
  2153.  move.w #$106,(a3)+
  2154.  move.w #$4c42,d5
  2155.  or.w d3,d5
  2156.  and.w #$fffe,d5
  2157.  move.w d5,(a1)+
  2158.  move.w d5,(a3)+
  2159.  bsr do32
  2160.  
  2161.  move.w #$106,(a1)+
  2162.  move.w #$106,(a3)+
  2163.  move.w #$6c42,d5
  2164.  or.w d3,d5
  2165.  and.w #$fffe,d5
  2166.  move.w d5,(a1)+
  2167.  move.w d5,(a3)+
  2168.  bsr do32
  2169.  
  2170.  move.w startwait,(a1)+
  2171.  move.w #$fffe,(a1)+
  2172.  move.w endwait,(a1)+
  2173.  move.w #$ff00,(a1)+
  2174.  move.w startwait,(a3)+
  2175.  move.w #$fffe,(a3)+
  2176.  move.w endwait,(a3)+
  2177.  move.w #$ff00,(a3)+
  2178.  
  2179. ; move.l $1fe0000,(a1)+
  2180. ; move.l $1fe0000,(a3)+
  2181. ; move.l $1fe0000,(a1)+
  2182. ; move.l $1fe0000,(a3)+
  2183.  
  2184.  
  2185.  add.w #$300,startwait
  2186.  add.w #$300,endwait
  2187.  
  2188. ; move.l #$1060c42,(a1)+
  2189. ; move.l #$1060c42,(a3)+
  2190. ; move.w #$19e,(a1)+
  2191. ; move.w (a5),(a1)+
  2192. ; move.w #$19e,(a3)+
  2193. ; move.w (a5)+,(a3)+
  2194.  
  2195. **********************************
  2196.  
  2197.  adda.w #104*4,a0
  2198.  adda.w #104*4,a2
  2199.  dbra d0,.fillcop
  2200.  
  2201.  move.w #$38,fetchstart
  2202.  move.w #$b8,fetchstop
  2203.  move.w #$2c81,winstart
  2204.  move.w #$2cc1,winstop
  2205.  move.w #-40,modulo
  2206.  move.w #-40,modulo+4
  2207.  
  2208.  move.l #nullspr,d0
  2209.  move.w d0,s0l
  2210.  move.w d0,s1l
  2211.  move.w d0,s2l
  2212.  move.w d0,s3l
  2213.  move.w d0,s4l
  2214.  move.w d0,s5l
  2215.  move.w d0,s6l
  2216.  move.w d0,s7l
  2217.  swap d0
  2218.  move.w d0,s0h
  2219.  move.w d0,s1h
  2220.  move.w d0,s2h
  2221.  move.w d0,s3h
  2222.  move.w d0,s4h
  2223.  move.w d0,s5h
  2224.  move.w d0,s6h
  2225.  move.w d0,s7h 
  2226.  
  2227.  move.l #scrn+40,a0
  2228.  move.l #scrn+160,a1
  2229.  move.l #scrn+280,a2
  2230.  move.l #scrntab,a3
  2231.  move.w #319,d7    ; counter
  2232.  move.w #0,d1    ; xpos
  2233. .plotscrnloop:
  2234.  move.b (a3)+,d0
  2235.  move.w d1,d2
  2236.  asr.w #3,d2
  2237.  move.b d1,d3
  2238.  not.b d3
  2239.  bclr.b d3,-40(a0,d2.w)
  2240.  bclr.b d3,(a0,d2.w)
  2241.  bclr.b d3,40(a0,d2.w)
  2242.  bclr.b d3,-40(a1,d2.w)
  2243.  bclr.b d3,(a1,d2.w)
  2244.  bclr.b d3,40(a1,d2.w)
  2245.  bclr.b d3,-40(a2,d2.w)
  2246.  btst #0,d0
  2247.  beq.s .nobp1
  2248.  bset.b d3,-40(a0,d2.w)
  2249. .nobp1:
  2250.  btst #1,d0
  2251.  beq.s .nobp2
  2252.  bset.b d3,(a0,d2.w)
  2253. .nobp2:
  2254.  btst #2,d0
  2255.  beq.s .nobp3
  2256.  bset.b d3,40(a0,d2.w)
  2257. .nobp3:
  2258.  btst #3,d0
  2259.  beq.s .nobp4
  2260.  bset.b d3,-40(a1,d2.w)
  2261. .nobp4:
  2262.  btst #4,d0
  2263.  beq.s .nobp5
  2264.  bset.b d3,(a1,d2.w)
  2265. .nobp5:
  2266.  btst #5,d0
  2267.  beq.s .nobp6
  2268.  bset.b d3,40(a1,d2.w)
  2269. .nobp6:
  2270.  btst #6,d0
  2271.  beq.s .nobp7
  2272.  bset.b d3,-40(a2,d2.w)
  2273. .nobp7:
  2274.  
  2275.  addq #1,d1
  2276.  
  2277.  dbra d7,.plotscrnloop
  2278.  
  2279.  rts
  2280.  
  2281. CLEARKEYBOARD:
  2282.  move.l #KeyMap,a5
  2283.  moveq #0,d0
  2284.  move.w #15,d1
  2285. clrloo:
  2286.  move.l d0,(a5)+
  2287.  move.l d0,(a5)+
  2288.  move.l d0,(a5)+
  2289.  move.l d0,(a5)+
  2290.  dbra d1,clrloo
  2291.  rts
  2292.  
  2293. READCONTROLS: dc.w 0
  2294.  
  2295. tstststst: dc.w 0
  2296.  
  2297. BollocksRoom:
  2298.  dc.w -1
  2299.  ds.l 50
  2300.  
  2301. GUNYOFFS:
  2302.  dc.w 20
  2303.  dc.w 20
  2304.  dc.w 0
  2305.  dc.w 20
  2306.  dc.w 20
  2307.  dc.w 0
  2308.  dc.w 0
  2309.  dc.w 20
  2310.  
  2311. USEPLR1:
  2312.  
  2313. ***********************************
  2314.  
  2315.  move.l PLR1_Obj,a0 
  2316.  move.l ObjectPoints,a1
  2317.  move.l #ObjRotated,a2
  2318.  move.w (a0),d0
  2319.  move.l PLR1_xoff,(a1,d0.w*8)
  2320.  move.l PLR1_zoff,4(a1,d0.w*8)
  2321.  move.l PLR1_Roompt,a1
  2322.  
  2323.  moveq #0,d2
  2324.  move.b damagetaken(a0),d2
  2325.  beq .notbeenshot
  2326.  move.w #$f00,hitcol
  2327.  move.w #$f00,hitcol2
  2328.  sub.w d2,PLR1_energy
  2329.  movem.l d0-d7/a0-a6,-(a7)
  2330.  move.b #$fb,IDNUM
  2331.  move.w #19,Samplenum
  2332.  clr.b notifplaying
  2333.  move.w #0,Noisex
  2334.  move.w #0,Noisez
  2335.  move.w #100,Noisevol
  2336.  jsr MakeSomeNoise
  2337.  
  2338.  movem.l (a7)+,d0-d7/a0-a6
  2339.  
  2340. .notbeenshot
  2341.  move.b #0,damagetaken(a0)
  2342.  move.b PLR1_energy+1,numlives(a0)
  2343.  
  2344.  move.b PLR1_StoodInTop,ObjInTop(a0)
  2345.  
  2346.  move.w (a1),12(a0)
  2347.  move.w (a1),d2
  2348.  move.l #ZoneBrightTable,a1
  2349.  move.l (a1,d2.w*4),d2
  2350.  tst.b PLR1_StoodInTop
  2351.  bne.s .okinbott
  2352.  swap d2
  2353. .okinbott:
  2354.  
  2355.  move.w d2,2(a0)
  2356.  
  2357.  move.l PLR1_yoff,d0
  2358.  move.l p1_height,d1
  2359.  asr.l #1,d1
  2360.  add.l d1,d0
  2361.  asr.l #7,d0
  2362.  move.w d0,4(a0)
  2363.  
  2364. ***********************************
  2365.  
  2366.  move.l PLR2_Obj,a0 
  2367.  
  2368.  move.w PLR2_angpos,d0
  2369.  and.w #8190,d0
  2370.  move.w d0,Facing(a0)
  2371.  
  2372.  jsr ViewpointToDraw
  2373.  asl.w #2,d0
  2374.  moveq #0,d1
  2375.  move.b p2_bobble,d1
  2376.  not.b d1
  2377.  lsr.b #3,d1
  2378.  and.b #$3,d1
  2379.  add.w d1,d0
  2380.  move.w d0,10(a0)
  2381.  move.w #10,8(a0)
  2382.  
  2383.  move.l ObjectPoints,a1
  2384.  move.l #ObjRotated,a2
  2385.  move.w (a0),d0
  2386.  move.l PLR2_xoff,(a1,d0.w*8)
  2387.  move.l PLR2_zoff,4(a1,d0.w*8)
  2388.  move.l PLR2_Roompt,a1
  2389.  
  2390.  moveq #0,d2
  2391.  move.b damagetaken(a0),d2
  2392.  beq .notbeenshot2
  2393.  sub.w d2,PLR2_energy
  2394. .notbeenshot2
  2395.  move.b #0,damagetaken(a0)
  2396.  move.b PLR2_energy+1,numlives(a0)
  2397.  
  2398.  move.b PLR2_StoodInTop,ObjInTop(a0)
  2399.  
  2400.  move.w (a1),12(a0)
  2401.  move.w (a1),d2
  2402.  move.l #ZoneBrightTable,a1
  2403.  move.l (a1,d2.w*4),d2
  2404.  tst.b PLR2_StoodInTop
  2405.  bne.s .okinbott2
  2406.  swap d2
  2407. .okinbott2:
  2408.  
  2409.  move.w d2,2(a0)
  2410.  
  2411.  move.l PLR2_yoff,d0
  2412.  move.l p2_height,d1
  2413.  asr.l #1,d1
  2414.  add.l d1,d0
  2415.  asr.l #7,d0
  2416.  move.w d0,4(a0)
  2417.  
  2418. **********************************
  2419.  
  2420.  
  2421.  move.l PLR1_Obj,a0
  2422.  move.w #-1,12+128(a0)
  2423.  
  2424.  rts
  2425.  
  2426. DRAWINGUN:
  2427.  move.l #Objects+9*16,a0
  2428.  move.l 4(a0),a5    ; ptr
  2429.  move.l 8(a0),a2    ; frames
  2430.  move.l 12(a0),a4    ; pal
  2431.  move.l (a0),a0        ; wad
  2432.  
  2433.  move.l #GunAnims,a1
  2434.  move.l (a1,d0.w*8),a1
  2435.  move.w (a1,d1.w*2),d5    ; frame of anim
  2436.  
  2437.  move.l #GUNYOFFS,a1
  2438.  move.w (a1,d0.w*2),d7    ; yoff
  2439.  move.l frompt,a6
  2440.  move.w d7,d6
  2441.  muls #104*4,d6
  2442.  add.l d6,a6    ; screen pointer
  2443.  
  2444.  asl.w #2,d0
  2445.  add.w d5,d0    ; frame
  2446.  move.w (a2,d0.w*4),d1    ; xoff
  2447.  
  2448.  lea (a5,d1.w),a5    ; right ptr
  2449.  
  2450.  move.w #31,d0
  2451.  bsr DRAWCHUNK
  2452.  addq.w #4,a6
  2453.  move.w #31,d0
  2454.  bsr DRAWCHUNK
  2455.  addq.w #4,a6
  2456.  move.w #31,d0
  2457.  bsr DRAWCHUNK
  2458.  rts
  2459.  
  2460.  
  2461. DRAWCHUNK:
  2462.  move.w #79,d3
  2463.  sub.w d7,d3
  2464.  move.l a6,a3
  2465.  move.b (a5),d2
  2466.  move.l (a5)+,d1
  2467.  bne.s .noblank
  2468.  addq #4,a6
  2469.  dbra d0,DRAWCHUNK 
  2470.  rts
  2471.  
  2472. .noblank:
  2473.  and.l #$ffffff,d1
  2474.  lea (a0,d1.l),a1
  2475.  cmp.b #1,d2
  2476.  bgt.s thirdd
  2477.  beq.s secc
  2478. .drawdown:
  2479.  move.w (a1)+,d2
  2480.  and.w #%11111,d2
  2481.  beq.s .itsblank
  2482.  move.w (a4,d2.w*2),(a3)
  2483. .itsblank
  2484.  add.w #104*4,a3
  2485.  dbra d3,.drawdown
  2486.  
  2487.  addq #4,a6
  2488.  dbra d0,DRAWCHUNK
  2489.  rts
  2490.  
  2491. secc:
  2492. .drawdown:
  2493.  move.w (a1)+,d2
  2494.  lsr.w #5,d2
  2495.  and.w #%11111,d2
  2496.  beq.s .itsblank
  2497.  move.w (a4,d2.w*2),(a3)
  2498. .itsblank
  2499.  add.w #104*4,a3
  2500.  dbra d3,.drawdown
  2501.  
  2502.  addq #4,a6
  2503.  dbra d0,DRAWCHUNK
  2504.  rts
  2505.  
  2506. thirdd:
  2507. .drawdown:
  2508.  move.b (a1),d2
  2509.  addq #2,a1
  2510.  lsr.b #2,d2
  2511.  and.w #%11111,d2
  2512.  beq.s .itsblank
  2513.  move.w (a4,d2.w*2),(a3)
  2514. .itsblank
  2515.  add.w #104*4,a3
  2516.  dbra d3,.drawdown
  2517.  
  2518.  addq #4,a6
  2519.  dbra d0,DRAWCHUNK
  2520.  rts
  2521.  
  2522.  
  2523.  
  2524. ***************************************************
  2525. **************************************************
  2526.  
  2527. USEPLR2:
  2528.  
  2529. ***********************************
  2530.  
  2531.  move.l PLR2_Obj,a0 
  2532.  move.l ObjectPoints,a1
  2533.  move.l #ObjRotated,a2
  2534.  move.w (a0),d0
  2535.  move.l PLR2_xoff,(a1,d0.w*8)
  2536.  move.l PLR2_zoff,4(a1,d0.w*8)
  2537.  move.l PLR2_Roompt,a1
  2538.  
  2539.  moveq #0,d2
  2540.  move.b damagetaken(a0),d2
  2541.  beq .notbeenshot
  2542.  move.w #$f00,hitcol
  2543.  move.w #$f00,hitcol2
  2544.  sub.w d2,PLR2_energy
  2545.  movem.l d0-d7/a0-a6,-(a7)
  2546.  move.w #19,Samplenum
  2547.  clr.b notifplaying
  2548.  move.b #$fb,IDNUM
  2549.  move.w #0,Noisex
  2550.  move.w #0,Noisez
  2551.  move.w #100,Noisevol
  2552.  jsr MakeSomeNoise
  2553.  
  2554.  movem.l (a7)+,d0-d7/a0-a6
  2555.  
  2556. .notbeenshot
  2557.  move.b #0,damagetaken(a0)
  2558.  move.b PLR2_energy+1,numlives(a0)
  2559.  
  2560.  move.b PLR2_StoodInTop,ObjInTop(a0)
  2561.  
  2562.  move.w (a1),12(a0)
  2563.  move.w (a1),d2
  2564.  move.l #ZoneBrightTable,a1
  2565.  move.l (a1,d2.w*4),d2
  2566.  tst.b PLR2_StoodInTop
  2567.  bne.s .okinbott
  2568.  swap d2
  2569. .okinbott:
  2570.  
  2571.  move.w d2,2(a0)
  2572.  
  2573.  move.l PLR2_yoff,d0
  2574.  move.l p2_height,d1
  2575.  asr.l #1,d1
  2576.  add.l d1,d0
  2577.  asr.l #7,d0
  2578.  move.w d0,4(a0)
  2579.  
  2580. ***********************************
  2581.  
  2582.  move.l PLR1_Obj,a0 
  2583.  
  2584.  move.w PLR1_angpos,d0
  2585.  and.w #8190,d0
  2586.  move.w d0,Facing(a0)
  2587.  
  2588.  jsr ViewpointToDraw
  2589.  asl.w #2,d0
  2590.  moveq #0,d1
  2591.  move.b p1_bobble,d1
  2592.  not.b d1
  2593.  lsr.b #3,d1
  2594.  and.b #$3,d1
  2595.  add.w d1,d0
  2596.  move.w d0,10(a0)
  2597.  move.w #10,8(a0)
  2598.  
  2599.  move.l ObjectPoints,a1
  2600.  move.l #ObjRotated,a2
  2601.  move.w (a0),d0
  2602.  move.l PLR1_xoff,(a1,d0.w*8)
  2603.  move.l PLR1_zoff,4(a1,d0.w*8)
  2604.  move.l PLR1_Roompt,a1
  2605.  
  2606.  moveq #0,d2
  2607.  move.b damagetaken(a0),d2
  2608.  beq .notbeenshot2
  2609.  sub.w d2,PLR1_energy
  2610. .notbeenshot2
  2611.  move.b #0,damagetaken(a0)
  2612.  move.b PLR1_energy+1,numlives(a0)
  2613.  
  2614.  move.b PLR1_StoodInTop,ObjInTop(a0)
  2615.  
  2616.  move.w (a1),12(a0)
  2617.  move.w (a1),d2
  2618.  move.l #ZoneBrightTable,a1
  2619.  move.l (a1,d2.w*4),d2
  2620.  tst.b PLR1_StoodInTop
  2621.  bne.s .okinbott2
  2622.  swap d2
  2623. .okinbott2:
  2624.  
  2625.  move.w d2,2(a0)
  2626.  
  2627.  move.l PLR1_yoff,d0
  2628.  move.l p1_height,d1
  2629.  asr.l #1,d1
  2630.  add.l d1,d0
  2631.  asr.l #7,d0
  2632.  move.w d0,4(a0)
  2633.  
  2634. **********************************
  2635.  
  2636.  move.l PLR2_Obj,a0
  2637.  move.w #-1,12+64(a0)
  2638.  
  2639.  rts
  2640.  
  2641.  
  2642. GunSelected: dc.b 0
  2643.  even
  2644.  
  2645. GunAnims:
  2646.  dc.l MachineAnim,3
  2647.  dc.l PlasmaAnim,5
  2648.  dc.l RocketAnim,5
  2649.  dc.l FlameThrowerAnim,5
  2650.  dc.l GrenadeAnim,12
  2651.  dc.l 0,0
  2652.  dc.l 0,0
  2653.  dc.l ShotGunAnim,12+19+11+20+1
  2654.  
  2655. MachineAnim:
  2656.  dc.w 0,1,2,3
  2657. PlasmaAnim:
  2658.  dc.w 0,1,2,3,3,3
  2659. RocketAnim:
  2660.  dc.w 0,1,2,3,3,3
  2661. FlameThrowerAnim:
  2662.  dc.w 0,1,2,3,3,3
  2663. GrenadeAnim:
  2664.  dc.w 0,1,1,1,1
  2665.  dc.w 2,2,2,2,3
  2666.  dc.w 3,3,3
  2667. ShotGunAnim:
  2668.  dc.w 0
  2669.  dcb.w 12,2
  2670.  dcb.w 19,1
  2671.  dcb.w 11,2
  2672.  dcb.w 20,0
  2673.  dc.w 3
  2674.  
  2675. GunData: dc.l 0
  2676.  
  2677. PLR1_GunData:
  2678. ; 0=Pistol 1=Big Gun
  2679. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  2680.  
  2681. ; VISIBLE/INSTANT (0/FF)
  2682. ; damage,gotgun(b)
  2683. ; Delay (w), Lifetime of bullet (w)
  2684. ; Click or hold down (0,1)
  2685. ; BulSpd: (w)
  2686.  
  2687. ;0
  2688.  dc.w 0
  2689. ;2
  2690.  dc.b 8,3
  2691. ;4
  2692.  dc.b 15
  2693. ;5
  2694.  dc.b -1
  2695. ;6
  2696.  dc.b 4,$ff
  2697. ;8
  2698.  dc.w 5,-1,1,0
  2699. ;16
  2700.  dc.w 0,0,0
  2701. ;22
  2702.  dc.w 1
  2703.  
  2704.  ds.w 4
  2705.  
  2706. ;PlasmaGun
  2707.  
  2708.  dc.w 0
  2709.  dc.b 8,1
  2710.  dc.b 20
  2711.  dc.b 0
  2712.  dc.b 16,0
  2713.  dc.w 10,-1,0,5
  2714.  dc.w 0,0,0
  2715.  dc.w 1
  2716.  
  2717.  ds.w 4
  2718.  
  2719. ;RocketLauncher
  2720.  
  2721.  dc.w 0
  2722.  dc.b 8,9
  2723.  dc.b 2
  2724.  dc.b 0
  2725.  dc.b 12,0
  2726.  dc.w 30,-1,0,5
  2727.  dc.w 0,0,0
  2728.  dc.w 1
  2729.  
  2730.  
  2731.  ds.w 4
  2732.  
  2733. ; FlameThrower
  2734.  
  2735.  dc.w 90*8
  2736.  dc.b 1,22
  2737.  dc.b 40
  2738.  dc.b 0
  2739.  dc.b 8,$0    
  2740.  dc.w 5,50,1,4
  2741.  dc.w 0,0,0
  2742.  dc.w 1
  2743.  
  2744.  ds.w 4
  2745.  
  2746. ;Grenade launcher
  2747.  
  2748.  
  2749.  dc.w 0
  2750.  dc.b 8,9
  2751.  dc.b 6
  2752.  dc.b 0
  2753.  dc.b 8,0
  2754.  dc.w 50,100,1,5
  2755.  dc.w 60,3
  2756.  dc.w -1000
  2757.  dc.w 1
  2758.  
  2759.  ds.w 4
  2760.  
  2761. ; WORMGUN
  2762.  
  2763.  dc.w 0
  2764.  dc.b 0,0
  2765.  dc.b 0
  2766.  dc.b 0,0
  2767.  dc.w 0,-1,0,5
  2768.  dc.w 0,0
  2769.  dc.w 0
  2770.  dc.w 1
  2771.  ds.w 4
  2772.  
  2773. ; ToughMarineGun
  2774.  
  2775.  dc.w 0
  2776.  dc.b 0,0
  2777.  dc.b 0
  2778.  dc.b 0,0
  2779.  dc.w 0,-1,0,5
  2780.  dc.w 0,0
  2781.  dc.w 0
  2782.  dc.w 1
  2783.  ds.w 4
  2784.  
  2785. ; Shotgun
  2786.  
  2787. ;0
  2788.  dc.w 0
  2789. ;2
  2790.  dc.b 8,21
  2791. ;4
  2792.  dc.b 15
  2793. ;5
  2794.  dc.b -1
  2795. ;6
  2796.  dc.b 4,0
  2797. ;8
  2798.  dc.w 50,-1,1,0
  2799. ;16
  2800.  dc.w 0,0,0
  2801. ;22
  2802.  dc.w 7
  2803.  
  2804.  ds.w 4
  2805.  
  2806. PLR2_GunData:
  2807. ; 0=Pistol 1=Big Gun
  2808. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  2809.  
  2810. ; VISIBLE/INSTANT (0/FF)
  2811. ; damage,gotgun(b)
  2812. ; Delay (w)
  2813.  
  2814. ;0
  2815.  dc.w 0
  2816. ;2
  2817.  dc.b 8,3
  2818. ;4
  2819.  dc.b 15
  2820. ;5
  2821.  dc.b -1
  2822. ;6
  2823.  dc.b 4,$ff
  2824. ;8
  2825.  dc.w 5,-1,1,0
  2826. ;16
  2827.  dc.w 0,0,0
  2828. ;22
  2829.  dc.w 1
  2830.  
  2831.  ds.w 4
  2832.  
  2833. ;PlasmaGun
  2834.  
  2835.  dc.w 0
  2836.  dc.b 8,1
  2837.  dc.b 20
  2838.  dc.b 0
  2839.  dc.b 16,0
  2840.  dc.w 10,-1,0,5
  2841.  dc.w 0,0,0
  2842.  dc.w 1
  2843.  
  2844.  ds.w 4
  2845.  
  2846. ;RocketLauncher
  2847.  
  2848.  dc.w 0
  2849.  dc.b 8,9
  2850.  dc.b 2
  2851.  dc.b 0
  2852.  dc.b 12,0
  2853.  dc.w 30,-1,0,5
  2854.  dc.w 0,0,0
  2855.  dc.w 1
  2856.  
  2857.  
  2858.  ds.w 4
  2859.  
  2860. ; FlameThrower
  2861.  
  2862.  dc.w 90*8
  2863.  dc.b 1,22
  2864.  dc.b 40
  2865.  dc.b 0
  2866.  dc.b 8,$0    
  2867.  dc.w 5,50,1,4
  2868.  dc.w 0,0,0
  2869.  dc.w 1
  2870.  
  2871.  ds.w 4
  2872.  
  2873. ;Grenade launcher
  2874.  
  2875.  
  2876.  dc.w 0
  2877.  dc.b 8,9
  2878.  dc.b 6
  2879.  dc.b 0
  2880.  dc.b 8,0
  2881.  dc.w 50,100,1,5
  2882.  dc.w 60,3
  2883.  dc.w -1000
  2884.  dc.w 1
  2885.  
  2886.  ds.w 4
  2887.  
  2888. ; WORMGUN
  2889.  
  2890.  dc.w 0
  2891.  dc.b 0,0
  2892.  dc.b 0
  2893.  dc.b 0,0
  2894.  dc.w 0,-1,0,5
  2895.  dc.w 0,0
  2896.  dc.w 0
  2897.  dc.w 1
  2898.  ds.w 4
  2899.  
  2900. ; ToughMarineGun
  2901.  
  2902.  dc.w 0
  2903.  dc.b 0,0
  2904.  dc.b 0
  2905.  dc.b 0,0
  2906.  dc.w 0,-1,0,5
  2907.  dc.w 0,0
  2908.  dc.w 0
  2909.  dc.w 1
  2910.  ds.w 4
  2911.  
  2912. ; Shotgun
  2913.  
  2914. ;0
  2915.  dc.w 0
  2916. ;2
  2917.  dc.b 8,21
  2918. ;4
  2919.  dc.b 15
  2920. ;5
  2921.  dc.b -1
  2922. ;6
  2923.  dc.b 4,0
  2924. ;8
  2925.  dc.w 50,-1,1,0
  2926. ;16
  2927.  dc.w 0,0,0
  2928. ;22
  2929.  dc.w 7
  2930.  
  2931.  ds.w 4
  2932.  
  2933.  
  2934.  
  2935. protA: dc.w 0
  2936.  
  2937. Path:
  2938. ; incbin "testpath"
  2939. endpath:
  2940. pathpt: dc.l Path
  2941.  
  2942.  
  2943. PLR1KEYS: dc.b 0
  2944. PLR1PATH: dc.b 0
  2945. PLR1MOUSE: dc.b -1
  2946. PLR1JOY: dc.b 0
  2947. PLR2KEYS: dc.b 0
  2948. PLR2PATH: dc.b 0
  2949. PLR2MOUSE: dc.b -1
  2950. PLR2JOY: dc.b 0
  2951.  
  2952.  even
  2953.  
  2954. PLR1_bobble: dc.w 0
  2955. PLR2_bobble: dc.w 0
  2956. xwobble: dc.l 0
  2957. xwobxoff: dc.w 0
  2958.  
  2959. xwobzoff: dc.w 0
  2960.  
  2961. PLR1_Control:
  2962.  
  2963. ; Take a snapshot of everything.
  2964.  
  2965.  move.l PLR1_xoff,d2
  2966.  move.l d2,PLR1_oldxoff
  2967.  move.l d2,oldx
  2968.  move.l PLR1_zoff,d3
  2969.  move.l d3,PLR1_oldzoff
  2970.  move.l d3,oldz
  2971.  move.l p1_xoff,d0
  2972.  move.l d0,PLR1_xoff
  2973.  move.l d0,newx
  2974.  move.l p1_zoff,d1
  2975.  move.l d1,newz
  2976.  move.l d1,PLR1_zoff
  2977.  
  2978.  move.l p1_height,PLR1_height
  2979.  
  2980.  sub.l d2,d0
  2981.  sub.l d3,d1
  2982.  move.l d0,xdiff
  2983.  move.l d1,zdiff
  2984.  move.w p1_angpos,d0
  2985.  move.w d0,PLR1_angpos
  2986.  
  2987.  move.l #SineTable,a1
  2988.  move.w (a1,d0.w),PLR1_sinval
  2989.  add.w #2048,d0
  2990.  and.w #8190,d0
  2991.  move.w (a1,d0.w),PLR1_cosval
  2992.  
  2993.  move.l p1_yoff,d0
  2994.  move.w p1_bobble,d1
  2995.  move.w (a1,d1.w),d1
  2996.  move.w d1,d3
  2997.  ble.s notnegative
  2998.  neg.w d1
  2999. notnegative:
  3000.  add.w #16384,d1
  3001.  asr.w #4,d1
  3002.  
  3003.  tst.b PLR1_Ducked
  3004.  bne.s .notdouble
  3005.  add.w d1,d1
  3006. .notdouble
  3007.  ext.l d1
  3008.  move.l PLR1_height,d4
  3009.  sub.l d1,d4
  3010.  add.l d1,d0
  3011.  
  3012.  asr.w #6,d3
  3013.  ext.l d3
  3014.  move.l d3,xwobble
  3015.  move.w PLR1_sinval,d1
  3016.  muls d3,d1
  3017.  move.w PLR1_cosval,d2
  3018.  muls d3,d2
  3019.  swap d1
  3020.  swap d2
  3021.  asr.w #7,d1
  3022.  move.w d1,xwobxoff
  3023.  asr.w #7,d2
  3024.  neg.w d2
  3025.  move.w d2,xwobzoff
  3026.  
  3027.  
  3028.  move.l d0,PLR1_yoff
  3029.  move.l d0,newy
  3030.  move.l d0,oldy
  3031.  
  3032.  move.l d4,thingheight
  3033.  move.l #40*256,StepUpVal
  3034.  tst.b PLR1_Ducked
  3035.  beq.s .okbigstep
  3036.  move.l #10*256,StepUpVal
  3037. .okbigstep:
  3038.  
  3039.  move.l #$1000000,StepDownVal
  3040.  
  3041.  move.l PLR1_Roompt,a0
  3042.  move.w ToTelZone(a0),d0
  3043.  blt .noteleport
  3044.  
  3045.  move.w ToTelX(a0),newx
  3046.  move.w ToTelZ(a0),newz
  3047.  move.w #-1,CollId
  3048.  move.l #%111111111111111111,CollideFlags
  3049.  bsr Collision
  3050.  tst.b hitwall
  3051.  beq.s .teleport
  3052.  
  3053.  move.w PLR1_xoff,newx
  3054.  move.w PLR1_zoff,newz
  3055.  bra .noteleport
  3056.  
  3057. .teleport:
  3058.  
  3059.  move.l PLR1_Roompt,a0
  3060.  move.w ToTelZone(a0),d0
  3061.  move.w ToTelX(a0),PLR1_xoff
  3062.  move.w ToTelZ(a0),PLR1_zoff
  3063.  move.l PLR1_yoff,d1
  3064.  sub.l ToZoneFloor(a0),d1
  3065.  move.l ZoneAdds,a0
  3066.  move.l (a0,d0.w*4),a0
  3067.  add.l LEVELDATA,a0
  3068.  move.l a0,PLR1_Roompt
  3069.  add.l ToZoneFloor(a0),d1
  3070.  move.l d1,PLR1s_yoff
  3071.  move.l d1,PLR1_yoff
  3072.  move.l d1,PLR1s_tyoff
  3073.  move.l PLR1_xoff,PLR1s_xoff
  3074.  move.l PLR1_zoff,PLR1s_zoff
  3075.  
  3076.  SAVEREGS
  3077.  move.w #0,Noisex
  3078.  move.w #0,Noisez
  3079.  move.w #26,Samplenum
  3080.  move.w #100,Noisevol
  3081.  move.b #$fa,IDNUM
  3082.  jsr MakeSomeNoise
  3083.  GETREGS
  3084.  
  3085.  bra .cantmove
  3086.  
  3087. .noteleport:
  3088.  
  3089.  move.l PLR1_Roompt,objroom
  3090.  move.w #%100000000,wallflags
  3091.  move.b PLR1_StoodInTop,StoodInTop
  3092.  
  3093.  move.l #%1011111110111000001,CollideFlags
  3094.  move.w #-1,CollId
  3095.  
  3096.  bsr Collision
  3097.  tst.b hitwall
  3098.  beq.s .nothitanything
  3099.  move.w oldx,PLR1_xoff
  3100.  move.w oldz,PLR1_zoff
  3101.  move.l PLR1_xoff,PLR1s_xoff
  3102.  move.l PLR1_zoff,PLR1s_zoff
  3103.  bra .cantmove
  3104. .nothitanything:
  3105.  
  3106.  move.w #160,extlen
  3107.  move.b #2,awayfromwall
  3108.  
  3109.  clr.b exitfirst
  3110.  clr.b wallbounce
  3111.  bsr MoveObject
  3112.  move.b StoodInTop,PLR1_StoodInTop
  3113.  move.l objroom,PLR1_Roompt
  3114.  move.w newx,PLR1_xoff
  3115.  move.w newz,PLR1_zoff
  3116.  move.l PLR1_xoff,PLR1s_xoff
  3117.  move.l PLR1_zoff,PLR1s_zoff
  3118.  
  3119. .cantmove:
  3120.  
  3121.  move.l PLR1_Roompt,a0
  3122.  
  3123.  move.l ToZoneFloor(a0),d0
  3124.  tst.b PLR1_StoodInTop
  3125.  beq.s notintop
  3126.  move.l ToUpperFloor(a0),d0
  3127. notintop:
  3128.  
  3129.  adda.w #ToZonePts,a0
  3130.  sub.l PLR1_height,d0
  3131.  move.l d0,PLR1s_tyoff
  3132.  move.w p1_angpos,tmpangpos
  3133.  
  3134. ; move.l (a0),a0        ; jump to viewpoint list
  3135.  * A0 is pointing at a pointer to list of points to rotate
  3136.  move.w (a0)+,d1
  3137.  ext.l d1
  3138.  add.l PLR1_Roompt,d1
  3139.  move.l d1,PLR1_PointsToRotatePtr
  3140.  tst.w (a0)+
  3141.  sne.s DRAWNGRAPHTOP
  3142.  beq.s nobackgraphics
  3143.  move.l a0,-(a7)
  3144.  jsr putinbackdrop 
  3145.  move.l (a7)+,a0
  3146. nobackgraphics:
  3147.  adda.w #10,a0
  3148.  move.l a0,PLR1_ListOfGraphRooms
  3149.  
  3150. *************************************************
  3151.  rts
  3152.  
  3153. DRAWNGRAPHTOP
  3154.  
  3155. tstzone: dc.l 0
  3156. CollId: dc.w 0
  3157.  
  3158. PLR2_Control:
  3159.  
  3160. ; Take a snapshot of everything.
  3161.  
  3162.  move.l PLR2_xoff,d2
  3163.  move.l d2,PLR2_oldxoff
  3164.  move.l d2,oldx
  3165.  move.l PLR2_zoff,d3
  3166.  move.l d3,PLR2_oldzoff
  3167.  move.l d3,oldz
  3168.  move.l p2_xoff,d0
  3169.  move.l d0,PLR2_xoff
  3170.  move.l d0,newx
  3171.  move.l p2_zoff,d1
  3172.  move.l d1,newz
  3173.  move.l d1,PLR2_zoff
  3174.  
  3175.  move.l p2_height,PLR2_height
  3176.  
  3177.  sub.l d2,d0
  3178.  sub.l d3,d1
  3179.  move.l d0,xdiff
  3180.  move.l d1,zdiff
  3181.  move.w p2_angpos,d0
  3182.  move.w d0,PLR2_angpos
  3183.  
  3184.  move.l #SineTable,a1
  3185.  move.w (a1,d0.w),PLR2_sinval
  3186.  add.w #2048,d0
  3187.  and.w #8190,d0
  3188.  move.w (a1,d0.w),PLR2_cosval
  3189.  
  3190.  move.l p2_yoff,d0
  3191.  move.w p2_bobble,d1
  3192.  move.w (a1,d1.w),d1
  3193.  move.w d1,d3
  3194.  ble.s .notnegative
  3195.  neg.w d1
  3196. .notnegative:
  3197.  add.w #16384,d1
  3198.  asr.w #4,d1
  3199.  add.w d1,d1
  3200.  ext.l d1
  3201.  move.l PLR2_height,d4
  3202.  sub.l d1,d4
  3203.  add.l d1,d0
  3204.  
  3205.  asr.w #6,d3
  3206.  ext.l d3
  3207.  move.l d3,xwobble
  3208.  move.w PLR2_sinval,d1
  3209.  muls d3,d1
  3210.  move.w PLR2_cosval,d2
  3211.  muls d3,d2
  3212.  swap d1
  3213.  swap d2
  3214.  asr.w #7,d1
  3215.  move.w d1,xwobxoff
  3216.  asr.w #7,d2
  3217.  neg.w d2
  3218.  move.w d2,xwobzoff
  3219.  
  3220.  
  3221.  move.l d0,PLR2_yoff
  3222.  move.l d0,newy
  3223.  move.l d0,oldy
  3224.  
  3225.  move.l d4,thingheight
  3226.  move.l #40*256,StepUpVal
  3227.  tst.b PLR2_Ducked
  3228.  beq.s .okbigstep
  3229.  move.l #10*256,StepUpVal
  3230. .okbigstep:
  3231.  
  3232.  move.l #$1000000,StepDownVal
  3233.  
  3234.  move.l PLR2_Roompt,a0
  3235.  move.w ToTelZone(a0),d0
  3236.  blt .noteleport
  3237.  
  3238.  move.w ToTelX(a0),newx
  3239.  move.w ToTelZ(a0),newz
  3240.  move.w #-1,CollId
  3241.  move.l #%111111111111111111,CollideFlags
  3242.  bsr Collision
  3243.  tst.b hitwall
  3244.  beq.s .teleport
  3245.  
  3246.  move.w PLR2_xoff,newx
  3247.  move.w PLR2_zoff,newz
  3248.  bra .noteleport
  3249.  
  3250. .teleport:
  3251.  
  3252.  move.l PLR2_Roompt,a0
  3253.  move.w ToTelZone(a0),d0
  3254.  move.w ToTelX(a0),PLR2_xoff
  3255.  move.w ToTelZ(a0),PLR2_zoff
  3256.  move.l PLR2_yoff,d1
  3257.  sub.l ToZoneFloor(a0),d1
  3258.  move.l ZoneAdds,a0
  3259.  move.l (a0,d0.w*4),a0
  3260.  add.l LEVELDATA,a0
  3261.  move.l a0,PLR2_Roompt
  3262.  add.l ToZoneFloor(a0),d1
  3263.  move.l d1,PLR2s_yoff
  3264.  move.l d1,PLR2_yoff
  3265.  move.l d1,PLR2s_tyoff
  3266.  move.l PLR2_xoff,PLR2s_xoff
  3267.  move.l PLR2_zoff,PLR2s_zoff
  3268.  
  3269.  SAVEREGS
  3270.  move.w #0,Noisex
  3271.  move.w #0,Noisez
  3272.  move.w #26,Samplenum
  3273.  move.w #100,Noisevol
  3274.  move.b #$fa,IDNUM
  3275.  jsr MakeSomeNoise
  3276.  GETREGS
  3277.  
  3278.  bra .cantmove
  3279.  
  3280. .noteleport:
  3281.  
  3282.  move.l PLR2_Roompt,objroom
  3283.  move.w #%100000000000,wallflags
  3284.  move.b PLR2_StoodInTop,StoodInTop
  3285.  
  3286.  move.l #%1011111010111100001,CollideFlags
  3287.  move.w #-1,CollId
  3288.  
  3289.  bsr Collision
  3290.  tst.b hitwall
  3291.  beq.s .nothitanything
  3292.  move.w oldx,PLR2_xoff
  3293.  move.w oldz,PLR2_zoff
  3294.  move.l PLR2_xoff,PLR2s_xoff
  3295.  move.l PLR2_zoff,PLR2s_zoff
  3296.  bra .cantmove
  3297. .nothitanything:
  3298.  
  3299.  move.w #40,extlen
  3300.  move.b #0,awayfromwall
  3301.  
  3302.  clr.b exitfirst
  3303.  clr.b wallbounce
  3304.  bsr MoveObject
  3305.  move.b StoodInTop,PLR2_StoodInTop
  3306.  move.l objroom,PLR2_Roompt
  3307.  move.w newx,PLR2_xoff
  3308.  move.w newz,PLR2_zoff
  3309.  move.l PLR2_xoff,PLR2s_xoff
  3310.  move.l PLR2_zoff,PLR2s_zoff
  3311.  
  3312. .cantmove
  3313.  
  3314.  move.l PLR2_Roompt,a0
  3315.  
  3316.  move.l ToZoneFloor(a0),d0
  3317.  tst.b PLR2_StoodInTop
  3318.  beq.s .notintop
  3319.  move.l ToUpperFloor(a0),d0
  3320. .notintop:
  3321.  
  3322.  adda.w #ToZonePts,a0
  3323.  sub.l PLR2_height,d0
  3324.  move.l d0,PLR2s_tyoff
  3325.  move.w p2_angpos,tmpangpos
  3326.  
  3327. ; move.l (a0),a0        ; jump to viewpoint list
  3328.  * A0 is pointing at a pointer to list of points to rotate
  3329.  move.w (a0)+,d1
  3330.  ext.l d1
  3331.  add.l PLR2_Roompt,d1
  3332.  move.l d1,PLR2_PointsToRotatePtr
  3333.  tst.w (a0)+
  3334.  beq.s .nobackgraphics
  3335.  move.l a0,-(a7)
  3336.  jsr putinbackdrop 
  3337.  move.l (a7)+,a0
  3338. .nobackgraphics:
  3339.  adda.w #10,a0
  3340.  move.l a0,PLR2_ListOfGraphRooms
  3341.  
  3342. *****************************************************
  3343.  
  3344.  rts
  3345.  
  3346.  
  3347. KeyMap: ds.b 256
  3348.  
  3349. fillscrnwater:
  3350.  dc.w 0
  3351. DONTDOGUN:
  3352.  dc.w 0
  3353.  
  3354.  
  3355. DrawDisplay:
  3356.  
  3357.  
  3358.  clr.b fillscrnwater
  3359.  
  3360.  move.l #SineTable,a0
  3361.  move.w angpos,d0
  3362.  move.w (a0,d0.w),d6
  3363.  adda.w #2048,a0
  3364.  move.w (a0,d0.w),d7
  3365.  move.w d6,sinval
  3366.  move.w d7,cosval
  3367.  
  3368.  move.l #KeyMap,a5
  3369.  moveq #0,d5
  3370.  move.b look_behind_key,d5
  3371.  tst.b (a5,d5.w)
  3372.  sne DONTDOGUN
  3373.  beq.s .nolookback
  3374.  neg.w cosval
  3375.  neg.w sinval
  3376. .nolookback:
  3377.  
  3378.  
  3379.  move.l yoff,d0
  3380.  asr.l #8,d0
  3381.  move.w d0,d1
  3382.  add.w #256-32,d1
  3383.  and.w #255,d1
  3384.  move.w d1,wallyoff
  3385.  asl.w #2,d0
  3386.  move.w d0,flooryoff
  3387.  
  3388.  move.w xoff,d6
  3389.  move.w d6,d3
  3390.  asr.w #1,d3
  3391.  add.w d3,d6
  3392.  asr.w #1,d6
  3393.  move.w d6,xoff34
  3394.  
  3395.  move.w zoff,d6
  3396.  move.w d6,d3
  3397.  asr.w #1,d3
  3398.  add.w d3,d6
  3399.  asr.w #1,d6
  3400.  move.w d6,zoff34
  3401.  
  3402.  bsr RotateLevelPts
  3403.  bsr RotateObjectPts
  3404.  bsr CalcPLR1InLine
  3405.  
  3406.  
  3407.  cmp.b #'n',mors
  3408.  bne.s doplr2too
  3409.  move.l PLR2_Obj,a0
  3410.  move.w #-1,12(a0)
  3411.  move.w #-1,GraphicRoom(a0)
  3412.  bra noplr2either
  3413.  
  3414. doplr2too:
  3415.  bsr CalcPLR2InLine
  3416. noplr2either:
  3417.  
  3418.  move.l endoflist,a0
  3419. subroomloop:
  3420.  move.w -(a0),d7
  3421.  blt jumpoutofrooms
  3422.  
  3423. ; bsr setlrclip
  3424. ; move.w leftclip,d0
  3425. ; cmp.w rightclip,d0
  3426. ; bge subroomloop
  3427.  move.l a0,-(a7)
  3428.  
  3429.  move.l ZoneAdds,a0
  3430.  move.l (a0,d7.w*4),a0
  3431.  add.l LEVELDATA,a0
  3432.  move.l ToZoneRoof(a0),SplitHeight
  3433.  move.l a0,ROOMBACK
  3434.  
  3435.  move.l ZoneGraphAdds,a0
  3436.  move.l 4(a0,d7.w*8),a2
  3437.  move.l (a0,d7.w*8),a0
  3438.  
  3439.  add.l LEVELGRAPHICS,a0
  3440.  add.l LEVELGRAPHICS,a2
  3441.  move.l a2,ThisRoomToDraw+4
  3442.  move.l a0,ThisRoomToDraw
  3443.  
  3444.  move.l ListOfGraphRooms,a1
  3445.  
  3446.  
  3447.  
  3448. finditit:
  3449.  tst.w (a1)
  3450.  blt nomoretodoatall
  3451.  cmp.w (a1),d7
  3452.  beq outoffind
  3453.  adda.w #8,a1
  3454.  bra finditit
  3455.  
  3456. outoffind:
  3457.  
  3458.  move.l a1,-(a7)
  3459.  
  3460.  
  3461.  move.w #0,leftclip
  3462.  move.w #96,rightclip
  3463.  moveq #0,d7
  3464.  move.w 2(a1),d7
  3465.  blt.s outofrcliplop
  3466.  move.l LEVELCLIPS,a0
  3467.  lea (a0,d7.l*2),a0
  3468.  
  3469.  tst.w (a0)
  3470.  blt outoflcliplop
  3471.  
  3472.  bsr NEWsetlclip
  3473.  
  3474. intolcliplop:        ; clips
  3475.  tst.w (a0)
  3476.  blt outoflcliplop
  3477.  
  3478.  bsr NEWsetlclip 
  3479.  bra intolcliplop
  3480.  
  3481. outoflcliplop:
  3482.  
  3483.  addq #2,a0
  3484.  
  3485.  tst.w (a0)
  3486.  blt outofrcliplop
  3487.  
  3488.  bsr NEWsetrclip
  3489.  
  3490. intorcliplop:        ; clips
  3491.  tst.w (a0)
  3492.  blt outofrcliplop
  3493.  
  3494.  bsr NEWsetrclip 
  3495.  bra intorcliplop
  3496.  
  3497. outofrcliplop:
  3498.  
  3499.  
  3500.  move.w leftclip,d0
  3501.  cmp.w #96,d0
  3502.  bge dontbothercantseeit
  3503.  move.w rightclip,d1
  3504.  blt dontbothercantseeit
  3505.  cmp.w d1,d0
  3506.  bge dontbothercantseeit
  3507.  
  3508.  move.l yoff,d0
  3509.  cmp.l SplitHeight,d0
  3510.  blt botfirst
  3511.  
  3512.  move.l ThisRoomToDraw+4,a0
  3513.  cmp.l LEVELGRAPHICS,a0
  3514.  beq.s noupperroom
  3515.  st DOUPPER
  3516.  
  3517.  move.l ROOMBACK,a1
  3518.  move.l ToUpperRoof(a1),TOPOFROOM
  3519.  move.l ToUpperFloor(a1),BOTOFROOM
  3520.  
  3521.  move.l #CurrentPointBrights+2,PointBrightsPtr
  3522.  bsr dothisroom
  3523. noupperroom:
  3524.  move.l ThisRoomToDraw,a0
  3525.  clr.b DOUPPER
  3526.  move.l #CurrentPointBrights,PointBrightsPtr
  3527.  
  3528.  move.l ROOMBACK,a1
  3529.  move.l ToZoneRoof(a1),d0
  3530.  move.l d0,TOPOFROOM
  3531.  move.l ToZoneFloor(a1),d1
  3532.  move.l d1,BOTOFROOM
  3533.  
  3534.  move.l ToZoneWater(a1),d2
  3535.  cmp.l yoff,d2
  3536.  blt.s .abovefirst
  3537.  move.l d2,BEFOREWATTOP
  3538.  move.l d1,BEFOREWATBOT
  3539.  move.l d2,AFTERWATBOT
  3540.  move.l d0,AFTERWATTOP
  3541.  bra.s .belowfirst
  3542. .abovefirst:
  3543.  move.l d0,BEFOREWATTOP
  3544.  move.l d2,BEFOREWATBOT
  3545.  move.l d1,AFTERWATBOT
  3546.  move.l d2,AFTERWATTOP
  3547. .belowfirst:
  3548.  
  3549.  bsr dothisroom
  3550.  
  3551.  bra dontbothercantseeit
  3552. botfirst:
  3553.  
  3554.  move.l ThisRoomToDraw,a0
  3555.  clr.b DOUPPER
  3556.  move.l #CurrentPointBrights,PointBrightsPtr
  3557.  
  3558.  move.l ROOMBACK,a1
  3559.  move.l ToZoneRoof(a1),d0
  3560.  move.l d0,TOPOFROOM
  3561.  move.l ToZoneFloor(a1),d1
  3562.  move.l d1,BOTOFROOM
  3563.  
  3564.  move.l ToZoneWater(a1),d2
  3565.  cmp.l yoff,d2
  3566.  blt.s .abovefirst
  3567.  move.l d2,BEFOREWATTOP
  3568.  move.l d1,BEFOREWATBOT
  3569.  move.l d2,AFTERWATBOT
  3570.  move.l d0,AFTERWATTOP
  3571.  bra.s .belowfirst
  3572. .abovefirst:
  3573.  move.l d0,BEFOREWATTOP
  3574.  move.l d2,BEFOREWATBOT
  3575.  move.l d1,AFTERWATBOT
  3576.  move.l d2,AFTERWATTOP
  3577. .belowfirst:
  3578.  
  3579.  
  3580.  bsr dothisroom
  3581.  move.l ThisRoomToDraw+4,a0
  3582.  cmp.l LEVELGRAPHICS,a0
  3583.  beq.s noupperroom2
  3584.  move.l #CurrentPointBrights+2,PointBrightsPtr
  3585.  
  3586.  move.l ROOMBACK,a1
  3587.  move.l ToUpperRoof(a1),TOPOFROOM
  3588.  move.l ToUpperFloor(a1),BOTOFROOM
  3589.  
  3590.  st DOUPPER
  3591.  bsr dothisroom
  3592. noupperroom2:
  3593.  
  3594. dontbothercantseeit:
  3595. pastemp:
  3596.  
  3597.  move.l (a7)+,a1
  3598.  move.l ThisRoomToDraw,a0
  3599.  move.w (a0),d7
  3600.  
  3601.  adda.w #8,a1
  3602.  bra finditit
  3603.  
  3604. nomoretodoatall:
  3605.  
  3606.  move.l (a7)+,a0
  3607.  
  3608.  bra subroomloop
  3609.  
  3610. jumpoutofrooms:
  3611.  
  3612.  tst.b DONTDOGUN
  3613.  bne NOGUNLOOK
  3614.  
  3615.  cmp.b #'s',mors
  3616.  beq.s drawslavegun
  3617.  
  3618.  moveq #0,d0
  3619.  move.b PLR1_GunSelected,d0
  3620.  moveq #0,d1
  3621.  move.b PLR1_GunFrame,d1
  3622.  bsr DRAWINGUN
  3623.  bra drawngun
  3624.  
  3625. drawslavegun
  3626.  moveq #0,d0
  3627.  move.b PLR2_GunSelected,d0
  3628.  moveq #0,d1
  3629.  move.b PLR2_GunFrame,d1
  3630.  bsr DRAWINGUN
  3631.  
  3632. drawngun:
  3633.  
  3634. NOGUNLOOK:
  3635.  
  3636.  moveq #0,d1
  3637.  move.b PLR1_GunFrame,d1
  3638.  sub.w TempFrames,d1
  3639.  bgt.s .nn
  3640.  moveq #0,d1
  3641. .nn
  3642.  move.b d1,PLR1_GunFrame
  3643.  
  3644.  ble.s .donefire
  3645.  sub.b #1,PLR1_GunFrame
  3646. .donefire:
  3647.  
  3648.  moveq #0,d1
  3649.  move.b PLR2_GunFrame,d1
  3650.  sub.w TempFrames,d1
  3651.  bgt.s .nn2
  3652.  moveq #0,d1
  3653. .nn2
  3654.  move.b d2,PLR2_GunFrame
  3655.  
  3656.  ble.s .donefire2
  3657.  sub.b #1,PLR2_GunFrame
  3658. .donefire2:
  3659.  
  3660.  
  3661.  move.w #3,d5
  3662.  tst.b fillscrnwater
  3663.  beq nowaterfull
  3664.  bgt oknothalf
  3665.  moveq #1,d5
  3666. oknothalf:
  3667.  
  3668.  bclr.b #1,$bfe001
  3669.  
  3670.  move.l #brightentab,a2
  3671.  moveq #0,d2
  3672.  move.l frompt,a0
  3673.  add.l #104*4*60,a0
  3674.  
  3675.  move.w #31,d0
  3676. fw:
  3677.  move.w d5,d1
  3678.  move.l a0,a1
  3679. fwd:
  3680. val SET 104*4*19
  3681.  REPT 20
  3682.  and.w #$ff,val(a1)
  3683. val SET val-104*4
  3684.  ENDR
  3685.  sub.l #104*4*20,a1
  3686.  dbra d1,fwd
  3687.  addq #4,a0
  3688.  dbra d0,fw
  3689.  
  3690.  addq #4,a0
  3691.  
  3692.  move.w #31,d0
  3693. sw:
  3694.  move.w d5,d1
  3695.  move.l a0,a1
  3696. swd:
  3697. val SET 104*4*19
  3698.  REPT 20
  3699.  and.w #$ff,val(a1)
  3700. val SET val-104*4
  3701.  ENDR
  3702.  sub.l #104*4*20,a1
  3703.  dbra d1,swd
  3704.  addq #4,a0
  3705.  dbra d0,sw
  3706.  
  3707.  addq #4,a0
  3708.  
  3709.  move.w #31,d0
  3710. tw:
  3711.  move.w d5,d1
  3712.  move.l a0,a1
  3713. twd:
  3714. val SET 104*4*19
  3715.  REPT 20
  3716.  and.w #$ff,val(a1)
  3717. val SET val-104*4
  3718.  ENDR
  3719.  sub.l #104*4*20,a1
  3720.  dbra d1,twd
  3721.  addq #4,a0
  3722.  dbra d0,tw
  3723.  
  3724.  rts
  3725.  
  3726. nowaterfull:
  3727.  bset.b #1,$bfe001
  3728.  rts
  3729.  
  3730. prot9: dc.w 0
  3731.  
  3732. TempBuffer: ds.l 100 
  3733.  
  3734. ClipTable: ds.l 30
  3735. EndOfClipPt: dc.l 0
  3736. DOUPPER: dc.w 0
  3737.  
  3738. RealTable:
  3739.  dc.l prot1-78935450
  3740.  dc.l prot2-78935450
  3741.  dc.l prot3-78935450
  3742.  dc.l prot4-78935450
  3743.  dc.l prot5-78935450
  3744.  dc.l prot6-78935450
  3745.  dc.l prot7-78935450
  3746.  dc.l prot8-78935450
  3747.  dc.l prot9-78935450
  3748.  dc.l protA-78935450
  3749.  
  3750. dothisroom
  3751.  
  3752.  move.w (a0)+,d0
  3753.  move.w d0,currzone
  3754.  move.l #ZoneBrightTable,a1
  3755.  move.l (a1,d0.w*4),d1
  3756.  tst.b DOUPPER
  3757.  bne.s .okbot
  3758.  swap d1
  3759. .okbot:
  3760.  move.w d1,ZoneBright
  3761.  
  3762. polyloop:
  3763.  move.w (a0)+,d0
  3764.  blt jumpoutofloop
  3765.  beq itsawall
  3766.  cmp.w #3,d0
  3767.  beq itsasetclip
  3768.  blt itsafloor
  3769.  cmp.w #4,d0
  3770.  beq itsanobject
  3771.  cmp.w #5,d0
  3772.  beq.s itsanarc
  3773.  cmp.w #6,d0
  3774.  beq itsalightbeam
  3775.  cmp.w #7,d0
  3776.  beq.s itswater
  3777.  cmp.w #9,d0
  3778.  ble itsachunkyfloor
  3779.  cmp.w #11,d0
  3780.  ble.s itsabumpyfloor
  3781.  cmp.w #12,d0
  3782.  beq.s itsbackdrop
  3783.  cmp.w #13,d0
  3784.  beq.s itsaseewall
  3785.  
  3786.  bra polyloop
  3787.  
  3788. itsaseewall:
  3789.  st seethru
  3790.  jsr itsawalldraw
  3791.  bra polyloop
  3792.  
  3793. itsbackdrop:
  3794.  jsr putinbackdrop
  3795.  bra polyloop
  3796.  
  3797. itswater:
  3798.  move.w #3,d0
  3799.  clr.b gourfloor
  3800.  move.l #FloorLine,LineToUse
  3801.  st usewater
  3802.  clr.b usebumps
  3803.  jsr itsafloordraw
  3804.  bra polyloop
  3805.  
  3806. itsanarc:
  3807.  jsr CurveDraw
  3808.  bra polyloop
  3809.  
  3810. itsanobject:
  3811.  jsr ObjDraw
  3812.  bra polyloop
  3813.  
  3814. itsalightbeam:
  3815.  jsr LightDraw
  3816.  bra polyloop
  3817.  
  3818. itsabumpyfloor:
  3819.  sub.w #9,d0
  3820.  st usebumps
  3821.  st smoothbumps
  3822.  clr.b usewater
  3823.  move.l #BumpLine,LineToUse
  3824.  jsr itsafloordraw
  3825.  bra polyloop
  3826.  
  3827. itsachunkyfloor:
  3828.  subq.w #7,d0
  3829.  st usebumps
  3830.  sub.w #12,topclip
  3831. ; add.w #10,botclip
  3832.  clr.b smoothbumps
  3833.  clr.b usewater
  3834.  move.l #BumpLine,LineToUse
  3835.  jsr itsafloordraw
  3836.  add.w #12,topclip
  3837. ; sub.w #10,botclip
  3838.  bra polyloop 
  3839.  
  3840. itsafloor:
  3841.  
  3842.  move.l THEFLOORLINE,LineToUse
  3843. * 1,2 = floor/roof
  3844.  clr.b usewater
  3845.  clr.b usebumps
  3846.  move.b GOURSEL,gourfloor    
  3847.  jsr itsafloordraw
  3848.  bra polyloop
  3849. itsasetclip:
  3850.  bra polyloop
  3851. itsawall:
  3852.  clr.b seethru
  3853. ; move.l #stripbuffer,a1
  3854.  jsr itsawalldraw
  3855.  bra polyloop
  3856.  
  3857. jumpoutofloop:
  3858.  rts
  3859.  
  3860. GOURSEL: dc.w 0
  3861. ThisRoomToDraw: dc.l 0,0
  3862. SplitHeight: dc.l 0
  3863.  
  3864.  include "ab3:source/OrderZones"
  3865.  
  3866. ReadMouse:
  3867.  move.l #$dff000,a6
  3868.  clr.l d0
  3869.  clr.l d1
  3870.  move.w $a(a6),d0
  3871.  lsr.w #8,d0
  3872.  ext.l d0
  3873.  move.w d0,d3
  3874.  move.w oldmy,d2
  3875.  sub.w d2,d0
  3876.  
  3877.  cmp.w #127,d0
  3878.  blt nonegy
  3879.  move.w #255,d1
  3880.  sub.w d0,d1
  3881.  move.w d1,d0
  3882.  neg.w d0
  3883. nonegy:
  3884.  
  3885.  cmp.w #-127,d0
  3886.  bge nonegy2
  3887.  move.w #255,d1
  3888.  add.w d0,d1
  3889.  move.w d1,d0
  3890. nonegy2:
  3891.  
  3892.  add.b d0,d2
  3893.  add.w d0,oldy2
  3894.  move.w d2,oldmy
  3895.  move.w d2,d0
  3896.  
  3897.  move.w oldy2,d0
  3898.  move.w d0,ymouse
  3899.  
  3900.  clr.l d0
  3901.  clr.l d1
  3902.  move.w $a(a6),d0
  3903.  ext.w d0
  3904.  ext.l d0
  3905.  move.w d0,d3
  3906.  move.w oldmx,d2
  3907.  sub.w d2,d0
  3908.  
  3909.  cmp.w #127,d0
  3910.  blt nonegx
  3911.  move.w #255,d1
  3912.  sub.w d0,d1
  3913.  move.w d1,d0
  3914.  neg.w d0
  3915. nonegx:
  3916.  
  3917.  cmp.w #-127,d0
  3918.  bge nonegx2
  3919.  move.w #255,d1
  3920.  add.w d0,d1
  3921.  move.w d1,d0
  3922. nonegx2:
  3923.  
  3924.  add.b d0,d2
  3925.  move.w d0,d1
  3926.  move.w d2,oldmx
  3927.  
  3928.  move.w #$0,$dff034
  3929.  btst #2,$dff016
  3930.  beq.s noturn
  3931.  
  3932.  add.w d0,oldx2
  3933.  move.w oldx2,d0
  3934.  and.w #2047,d0
  3935.  move.w d0,oldx2
  3936.  
  3937.  asl.w #2,d0
  3938.  sub.w prevx,d0
  3939.  add.w d0,prevx
  3940.  add.w d0,angpos
  3941.  move.w #0,lrs
  3942.  rts
  3943.  
  3944. noturn:
  3945.  
  3946. ; got to move lr instead. 
  3947.  
  3948. ; d1 = speed moved l/r
  3949.  
  3950.  move.w d1,lrs
  3951.  
  3952.  rts
  3953.  
  3954. lrs: dc.w 0
  3955. prevx: dc.w 0
  3956.  
  3957. angpos: dc.w 0
  3958. mang: dc.w 0
  3959. oldymouse: dc.w 0
  3960. xmouse: dc.w 0
  3961. ymouse: dc.w 0
  3962. oldx2: dc.w 0
  3963. oldmx: dc.w 0
  3964. oldmy: dc.w 0
  3965. oldy2: dc.w 0
  3966.  
  3967. RotateLevelPts:
  3968.  
  3969.  move.w sinval,d6
  3970.  swap d6
  3971.  move.w cosval,d6
  3972.  
  3973.  move.l PointsToRotatePtr,a0
  3974.  move.l Points,a3
  3975.  move.l #Rotated,a1
  3976.  move.l #OnScreen,a2
  3977.  move.w xoff,d4
  3978.  move.w zoff,d5
  3979.  
  3980. ; move.w #$c40,$dff106
  3981. ; move.w #$f00,$dff180
  3982.  
  3983. pointrotlop:
  3984.  move.w (a0)+,d7
  3985.  blt.s outofpointrot
  3986.  
  3987.  move.w (a3,d7*4),d0
  3988.  sub.w d4,d0
  3989.  move.w d0,d2
  3990.  move.w 2(a3,d7*4),d1
  3991.  sub.w d5,d1
  3992.  muls d6,d2
  3993.  swap d6
  3994.  move.w d1,d3
  3995.  muls d6,d3
  3996.  sub.l d3,d2
  3997.  add.l d2,d2
  3998.  swap d2
  3999.  ext.l d2
  4000.  asl.l #7,d2
  4001.  add.l xwobble,d2
  4002.  move.l d2,(a1,d7*8)
  4003.  
  4004.  muls d6,d0
  4005.  swap d6
  4006.  muls d6,d1
  4007.  add.l d0,d1
  4008.  asl.l #2,d1
  4009.  swap d1
  4010.  move.l d1,4(a1,d7*8)
  4011.  
  4012.  tst.w d1
  4013.  bgt.s ptnotbehind
  4014.  tst.w d2
  4015.  bgt.s onrightsomewhere
  4016.  move.w #0,d2
  4017.  bra putin
  4018. onrightsomewhere:
  4019.  move.w #96,d2
  4020.  bra putin
  4021. ptnotbehind:
  4022.  
  4023.  divs d1,d2
  4024.  add.w #47,d2
  4025. putin:
  4026.  move.w d2,(a2,d7*2)
  4027.  
  4028.  bra pointrotlop
  4029. outofpointrot:
  4030.  
  4031. ; move.w #$c40,$dff106
  4032. ; move.w #$ff0,$dff180
  4033.  
  4034.  rts
  4035.  
  4036. PLR1_ObjDists
  4037.  ds.w 250
  4038. PLR2_ObjDists
  4039.  ds.w 250
  4040.  
  4041. CalcPLR1InLine:
  4042.  
  4043.  move.w PLR1_sinval,d5
  4044.  move.w PLR1_cosval,d6
  4045.  move.l ObjectData,a4
  4046.  move.l ObjectPoints,a0
  4047.  move.w NumObjectPoints,d7
  4048.  move.l #PLR1_ObsInLine,a2
  4049.  move.l #PLR1_ObjDists,a3
  4050.  
  4051. .objpointrotlop:
  4052.  
  4053.  move.w (a0),d0
  4054.  sub.w PLR1_xoff,d0
  4055.  move.w 4(a0),d1
  4056.  addq #8,a0
  4057.  
  4058.  tst.w 12(a4)
  4059.  blt .noworkout
  4060.  
  4061.  moveq #0,d2
  4062.  move.b 16(a4),d2
  4063.  move.l #ColBoxTable,a6
  4064.  lea (a6,d2.w*8),a6
  4065.  
  4066.  sub.w PLR1_zoff,d1
  4067.  move.w d0,d2
  4068.  muls d6,d2
  4069.  move.w d1,d3
  4070.  muls d5,d3
  4071.  sub.l d3,d2
  4072.  add.l d2,d2
  4073.  
  4074.  bgt.s .okh
  4075.  neg.l d2
  4076. .okh:
  4077.  swap d2
  4078.  
  4079.  muls d5,d0
  4080.  muls d6,d1
  4081.  add.l d0,d1
  4082.  asl.l #2,d1
  4083.  swap d1
  4084.  moveq #0,d3
  4085.  
  4086.  tst.w d1
  4087.  ble.s .notinline
  4088.  asr.w #1,d2
  4089.  cmp.w (a6),d2
  4090.  bgt.s .notinline
  4091.  
  4092.  st d3
  4093. .notinline
  4094.  move.b d3,(a2)+
  4095.  
  4096.  move.w d1,(a3)+
  4097.  
  4098.  add.w #64,a4
  4099.  dbra d7,.objpointrotlop
  4100.  
  4101.  rts
  4102.  
  4103. .noworkout:
  4104.  move.b #0,(a2)+
  4105.  move.w #0,(a3)+
  4106.  add.w #64,a4
  4107.  dbra d7,.objpointrotlop
  4108.  rts
  4109.  
  4110.  
  4111. CalcPLR2InLine:
  4112.  
  4113.  move.w PLR2_sinval,d5
  4114.  move.w PLR2_cosval,d6
  4115.  move.l ObjectData,a4
  4116.  move.l ObjectPoints,a0
  4117.  move.w NumObjectPoints,d7
  4118.  move.l #PLR2_ObsInLine,a2
  4119.  move.l #PLR2_ObjDists,a3
  4120.  
  4121. .objpointrotlop:
  4122.  
  4123.  move.w (a0),d0
  4124.  sub.w PLR2_xoff,d0
  4125.  move.w 4(a0),d1
  4126.  addq #8,a0
  4127.  
  4128.  tst.w 12(a4)
  4129.  blt .noworkout
  4130.  
  4131.  moveq #0,d2
  4132.  move.b 16(a4),d2
  4133.  move.l #ColBoxTable,a6
  4134.  lea (a6,d2.w*8),a6
  4135.  
  4136.  sub.w PLR2_zoff,d1
  4137.  move.w d0,d2
  4138.  muls d6,d2
  4139.  move.w d1,d3
  4140.  muls d5,d3
  4141.  sub.l d3,d2
  4142.  add.l d2,d2
  4143.  
  4144.  bgt.s .okh
  4145.  neg.l d2
  4146. .okh:
  4147.  swap d2
  4148.  
  4149.  muls d5,d0
  4150.  muls d6,d1
  4151.  add.l d0,d1
  4152.  asl.l #2,d1
  4153.  swap d1
  4154.  moveq #0,d3
  4155.  
  4156.  tst.w d1
  4157.  ble.s .notinline
  4158.  asr.w #1,d2
  4159.  cmp.w (a6),d2
  4160.  bgt.s .notinline
  4161.  
  4162.  st d3
  4163. .notinline
  4164.  move.b d3,(a2)+
  4165.  
  4166.  move.w d1,(a3)+
  4167.  
  4168.  add.w #64,a4
  4169.  dbra d7,.objpointrotlop
  4170.  
  4171.  rts
  4172.  
  4173. .noworkout:
  4174.  move.w #0,(a3)+
  4175.  move.b #0,(a2)+
  4176.  add.w #64,a4
  4177.  dbra d7,.objpointrotlop
  4178.  rts
  4179.  
  4180.  
  4181. RotateObjectPts:
  4182.  
  4183.  move.w sinval,d5
  4184.  move.w cosval,d6
  4185.  
  4186.  move.l ObjectData,a4
  4187.  move.l ObjectPoints,a0
  4188.  move.w NumObjectPoints,d7
  4189.  move.l #ObjRotated,a1
  4190.  
  4191. .objpointrotlop:
  4192.  
  4193.  move.w (a0),d0
  4194.  sub.w xoff,d0
  4195.  move.w 4(a0),d1
  4196.  addq #8,a0
  4197.  
  4198.  tst.w 12(a4)
  4199.  blt .noworkout
  4200.  
  4201.  sub.w zoff,d1
  4202.  move.w d0,d2
  4203.  muls d6,d2
  4204.  move.w d1,d3
  4205.  muls d5,d3
  4206.  sub.l d3,d2
  4207.  
  4208.  
  4209.  add.l d2,d2
  4210.  swap d2
  4211.  move.w d2,(a1)+
  4212.  
  4213.  muls d5,d0
  4214.  muls d6,d1
  4215.  add.l d0,d1
  4216.  asl.l #2,d1
  4217.  swap d1
  4218.  moveq #0,d3
  4219.  
  4220.  move.w d1,(a1)+
  4221.  ext.l d2
  4222.  asl.l #7,d2
  4223.  add.l xwobble,d2
  4224.  move.l d2,(a1)+
  4225.  sub.l xwobble,d2
  4226.  
  4227.  add.w #64,a4
  4228.  dbra d7,.objpointrotlop
  4229.  
  4230.  rts
  4231.  
  4232. .noworkout:
  4233.   move.l #0,(a1)+
  4234.   move.l #0,(a1)+
  4235.   add.w #64,a4
  4236.   dbra d7,.objpointrotlop
  4237.   rts
  4238.  
  4239. LightDraw:
  4240.  
  4241.  move.w (a0)+,d0
  4242.  move.w (a0)+,d1
  4243.  move.l #Rotated,a1
  4244.  move.w 6(a1,d0.w*8),d2
  4245.  ble.s oneendbehind
  4246.  move.w 6(a1,d1.w*8),d3
  4247.  bgt.s bothendsinfront
  4248.  
  4249. oneendbehind:
  4250.  rts
  4251. bothendsinfront:
  4252.  
  4253.  move.l #OnScreen,a2
  4254.  move.w (a2,d0.w*2),d0
  4255.  bge.s okleftend
  4256.  moveq #0,d0
  4257. okleftend:
  4258.  move.w (a2,d1.w*2),d1
  4259.  bgt.s somevis
  4260.  rts
  4261. somevis:
  4262.  cmp.w #95,d0
  4263.  ble.s somevis2
  4264.  rts
  4265. somevis2:
  4266.  cmp.w #95,d1
  4267.  ble.s okrightend
  4268.  move.w #95,d1
  4269. okrightend:
  4270.  
  4271.  sub.w d0,d1
  4272.  blt.s wrongbloodywayround
  4273.  move.l #brightentab,a4
  4274.  move.l #objintocop,a1
  4275.  lea (a1,d0.w*2),a1
  4276.  
  4277.  move.l frompt,a3
  4278.  move.w #104*4,d6
  4279.  move.w #79,d2
  4280. lacross:
  4281.  move.w d2,d3
  4282.  move.l a3,a2
  4283.  adda.w (a1)+,a2
  4284. ldown:
  4285.  add.w d6,a2
  4286.  move.w (a2),d7
  4287.  move.w (a4,d7.w*2),(a2)
  4288.  dbra d3,ldown
  4289.  dbra d1,lacross
  4290.  
  4291. wrongbloodywayround:
  4292.  
  4293.  rts
  4294.  
  4295. FaceToPlace: dc.w 0
  4296.  
  4297. Cheese:
  4298.  dc.w 4,15
  4299.  
  4300. FacesList:
  4301.  dc.w 0,4*4
  4302.  dc.w 1,2*4
  4303.  dc.w 0,2*4
  4304.  dc.w 2,2*4
  4305.  dc.w 0,2*4
  4306.  dc.w 1,3*4
  4307.  dc.w 0,2*4
  4308.  dc.w 2,3*4
  4309.  dc.w 0,5*4
  4310.  dc.w 1,2*4
  4311.  dc.w 0,2*4
  4312.  dc.w 2,2*4
  4313.  dc.w 0,2*4
  4314.  dc.w 1,2*4
  4315.  dc.w 0,2*4
  4316.  dc.w 2,3*4
  4317.  dc.w 0,1*4
  4318.  dc.w 1,3*4
  4319.  dc.w 0,1*4
  4320.  dc.w 2,3*4
  4321.  dc.w 0,1*4
  4322.  
  4323. EndOfFacesList:
  4324.  
  4325. FacesPtr:
  4326.  dc.l FacesList
  4327. FacesCounter:
  4328.  dc.w 0
  4329. Expression:
  4330.  dc.w 0
  4331.  
  4332. PlaceFace:
  4333.  
  4334.  move.w FacesCounter,d0
  4335.  subq #1,d0
  4336.  bgt.s NoNewFace
  4337.  
  4338.  move.l FacesPtr,a0
  4339.  
  4340.  move.w 2(a0),d0
  4341.  move.w (a0),Expression
  4342.  addq #4,a0
  4343.  cmp.l #EndOfFacesList,a0
  4344.  blt.s NotFirstFace
  4345.  
  4346.  move.l #FacesList,a0
  4347.  
  4348. NotFirstFace
  4349.  move.l a0,FacesPtr
  4350.  
  4351. NoNewFace:
  4352.  
  4353.  move.w d0,FacesCounter
  4354.  
  4355.  Move.w FaceToPlace,d0
  4356.  muls #5,d0
  4357.  add.w Expression,d0
  4358.  move.l #FacePlace+10,a0
  4359.  move.l #Faces,a1
  4360.  muls #(4*32*5),d0
  4361.  adda.w d0,a1
  4362.  move.w #4,d0
  4363.  move.w #24,d1
  4364.  
  4365.  move.w #4,d3
  4366. bitplaneloop:
  4367.  move.w #31,d2
  4368. PlaceFaceToPlaceInFacePlaceLoop:
  4369.  move.l (a1),(a0)
  4370.  adda.w d0,a1
  4371.  adda.w d1,a0
  4372.  dbra d2,PlaceFaceToPlaceInFacePlaceLoop
  4373.  dbra d3,bitplaneloop
  4374.  
  4375.  rts
  4376.  
  4377. Energy:
  4378.  dc.w 191
  4379. OldEnergy:
  4380.  dc.w 191
  4381. Ammo: dc.w 63
  4382. OldAmmo: dc.w 63
  4383.  
  4384. FullEnergy:
  4385.  move.w #127,Energy
  4386.  move.w #127,OldEnergy
  4387.  move.l #health,a0
  4388.  move.l #borders,a1
  4389.  add.l #25*8*2+6,a1
  4390.  lea 2592(a1),a2
  4391.  move.w #127,d0
  4392. PutInFull:
  4393.  move.b (a0)+,(a1)
  4394.  move.b (a0)+,8(a1)
  4395.  add.w #16,a1
  4396.  move.b (a0)+,(a2)
  4397.  move.b (a0)+,8(a2)
  4398.  add.w #16,a2
  4399.  dbra d0,PutInFull
  4400.  
  4401.  rts
  4402.  
  4403. EnergyBar:
  4404.  
  4405.  move.w Energy,d0
  4406.  cmp.w OldEnergy,d0
  4407.  bne.s gottochange
  4408.  
  4409. NoChange
  4410.  rts
  4411.  
  4412. gottochange:
  4413.   
  4414.  blt LessEnergy
  4415.  cmp.w #127,Energy
  4416.  blt.s NotMax
  4417.  move.w #127,Energy
  4418. NotMax:
  4419.  
  4420.  move.w Energy,d0
  4421.  move.w OldEnergy,d2
  4422.  sub.w d0,d2
  4423.  beq.s NoChange    
  4424.  neg.w d2
  4425.  
  4426.  move.w #127,d3
  4427.  sub.w d0,d3
  4428.  
  4429.  move.l #health,a0
  4430.  lea (a0,d3.w*4),a0
  4431.  move.l #borders+25*16+6,a1
  4432.  lsl.w #4,d3
  4433.  add.w d3,a1
  4434.  lea 2592(a1),a2
  4435.  
  4436. EnergyRise:
  4437.  move.b (a0)+,(a1)
  4438.  move.b (a0)+,8(a1)
  4439.  add.w #16,a1
  4440.  move.b (a0)+,(a2)
  4441.  move.b (a0)+,8(a2)
  4442.  add.w #16,a2
  4443.  subq #1,d2
  4444.  bgt.s EnergyRise
  4445.  
  4446.  move.w Energy,OldEnergy
  4447.  
  4448.  rts 
  4449.  
  4450. LessEnergy: 
  4451.  move.w OldEnergy,d2
  4452.  sub.w d0,d2
  4453.  
  4454.  move.w #127,d3
  4455.  sub.w OldEnergy,d3
  4456.  
  4457.  move.l #borders+25*16+6,a1
  4458.  asl.w #4,d3
  4459.  add.w d3,a1
  4460.  lea 2592(a1),a2
  4461.  
  4462. EnergyDrain:
  4463.  move.b #0,(a1)
  4464.  move.b #0,8(a1)
  4465.  move.b #0,(a2)
  4466.  move.b #0,8(a2)
  4467.  add.w #16,a1
  4468.  add.w #16,a2
  4469.  subq #1,d2
  4470.  bgt.s EnergyDrain
  4471.  
  4472.  move.w Energy,OldEnergy
  4473.  
  4474.  rts 
  4475.  
  4476. AmmoBar:
  4477.  
  4478.  move.w Ammo,d0
  4479.  cmp.w OldAmmo,d0
  4480.  bne.s .gottochange
  4481.  
  4482. .NoChange
  4483.  rts
  4484.  
  4485. .gottochange:
  4486.   
  4487.  blt LessAmmo
  4488.  cmp.w #63,Ammo
  4489.  blt.s .NotMax
  4490.  move.w #63,Ammo
  4491. .NotMax:
  4492.  
  4493.  move.w Ammo,d0
  4494.  move.w OldAmmo,d2
  4495.  sub.w d0,d2
  4496.  beq.s .NoChange
  4497.  neg.w d2
  4498.  
  4499.  move.w #63,d3
  4500.  sub.w d0,d3
  4501.  
  4502.  move.l #Ammunition,a0
  4503.  lea (a0,d3.w*8),a0
  4504.  move.l #borders+5184+25*16+1,a1
  4505.  lsl.w #5,d3
  4506.  add.w d3,a1
  4507.  lea 2592(a1),a2
  4508.  
  4509. AmmoRise:
  4510.  move.b (a0)+,(a1)
  4511.  move.b (a0)+,8(a1)
  4512.  add.w #16,a1
  4513.  move.b (a0)+,(a2)
  4514.  move.b (a0)+,8(a2)
  4515.  add.w #16,a2
  4516.  move.b (a0)+,(a1)
  4517.  move.b (a0)+,8(a1)
  4518.  add.w #16,a1
  4519.  move.b (a0)+,(a2)
  4520.  move.b (a0)+,8(a2)
  4521.  add.w #16,a2
  4522.  subq #1,d2
  4523.  bgt.s AmmoRise
  4524.  
  4525.  move.w Ammo,OldAmmo
  4526.  
  4527.  rts 
  4528.  
  4529.  
  4530. LessAmmo: 
  4531.  move.w OldAmmo,d2
  4532.  sub.w d0,d2
  4533.  
  4534.  move.w #63,d3
  4535.  sub.w OldAmmo,d3
  4536.  
  4537.  move.l #borders++5184+25*16+1,a1
  4538.  asl.w #5,d3
  4539.  add.w d3,a1
  4540.  lea 2592(a1),a2
  4541.  
  4542. AmmoDrain:
  4543.  move.b #0,(a1)
  4544.  move.b #0,8(a1)
  4545.  move.b #0,(a2)
  4546.  move.b #0,8(a2)
  4547.  add.w #16,a1
  4548.  add.w #16,a2
  4549.  move.b #0,(a1)
  4550.  move.b #0,8(a1)
  4551.  move.b #0,(a2)
  4552.  move.b #0,8(a2)
  4553.  add.w #16,a1
  4554.  add.w #16,a2
  4555.  subq #1,d2
  4556.  bgt.s AmmoDrain
  4557.  
  4558.  move.w Ammo,OldAmmo
  4559.  
  4560.  rts 
  4561.  
  4562. nulop:
  4563.  move.w #$0010,$dff000+intreq
  4564.  rte
  4565.  
  4566. doanything: dc.w 0
  4567.  
  4568. end:
  4569.  
  4570.  move.w PLR1_energy,Energy
  4571.  cmp.b #'s',mors
  4572.  bne.s .notsl
  4573.  move.w PLR2_energy,Energy
  4574. .notsl:
  4575.  
  4576.  bsr EnergyBar
  4577.  
  4578.  move.l drawpt,d0
  4579.  move.l olddrawpt,drawpt
  4580.  move.l d0,olddrawpt
  4581.  move.l d0,$dff084
  4582.  
  4583.  
  4584.  clr.b doanything
  4585.  cmp.b #'b',Prefsfile+3
  4586.  bne.s .noback
  4587.  jsr mt_end
  4588. .noback
  4589.  tst.w Energy
  4590.  bgt.s wevewon
  4591.  
  4592.  move.l #gameover,mt_data
  4593.  st UseAllChannels
  4594.  clr.b reachedend
  4595.  jsr mt_init
  4596. playgameover:
  4597.  move.l #$dff000,a6
  4598. waitfortop2:
  4599.  btst.b #0,intreqrl(a6)
  4600.  beq waitfortop2
  4601.  move.w #$1,intreq(a6)
  4602.  
  4603.  jsr mt_music
  4604.  
  4605.  tst.b reachedend
  4606.  beq.s playgameover
  4607.  
  4608.  bra wevelost
  4609.  
  4610.  
  4611. wevewon:
  4612.  
  4613.  cmp.b #'n',mors
  4614.  bne.s .nonextlev
  4615.  cmp.w #15,MAXLEVEL
  4616.  bge.s .nonextlev
  4617.  add.w #1,MAXLEVEL
  4618.  st FINISHEDLEVEL
  4619. .nonextlev:
  4620.  
  4621.  move.l #welldone,mt_data
  4622.  st UseAllChannels
  4623.  clr.b reachedend
  4624.  jsr mt_init
  4625. playwelldone:
  4626.  move.l #$dff000,a6
  4627. waitfortop3:
  4628.  btst.b #0,intreqrl(a6)
  4629.  beq waitfortop3
  4630.  move.w #$1,intreq(a6)
  4631.  
  4632.  jsr mt_music
  4633.  
  4634.  tst.b reachedend
  4635.  beq.s playwelldone
  4636.  
  4637. wevelost:
  4638.  jmp closeeverything 
  4639.  
  4640. endnomusic
  4641.  clr.b doanything
  4642.  cmp.b #'b',Prefsfile+3
  4643.  bne.s .noback
  4644.  jsr mt_end
  4645. .noback
  4646. *******************************
  4647.  cmp.b #'n',mors
  4648.  bne.s .nonextlev
  4649.  cmp.w #15,MAXLEVEL
  4650.  bge.s .nonextlev
  4651.  add.w #1,MAXLEVEL
  4652.  st FINISHEDLEVEL
  4653. .nonextlev:
  4654. ******************************
  4655.  
  4656.  jmp closeeverything
  4657.  
  4658. do32:
  4659.  move.w #31,d7
  4660.  move.w #$180,d1
  4661. across:
  4662.  move.w d1,(a1)+
  4663.  move.w d1,(a3)+
  4664.  move.w #0,(a1)+ 
  4665.  move.w #0,(a3)+
  4666.  add.w #2,d1
  4667.  dbra d7,across
  4668.  rts
  4669.  
  4670. ***********************************
  4671.  include "ab3:source/CD32JOY"
  4672.  
  4673.  
  4674.  
  4675. *************************************
  4676. * Set left and right clip values
  4677. *************************************
  4678.  
  4679.  
  4680.  
  4681. NEWsetlclip:
  4682.  move.l #OnScreen,a1
  4683.  move.l #Rotated,a2
  4684.  move.l CONNECT_TABLE,a3
  4685.  
  4686.  move.w (a0),d0
  4687.  bge.s .notignoreleft
  4688.  
  4689. ; move.l #0,(a6)
  4690.  
  4691.  bra .leftnotoktoclip
  4692. .notignoreleft:
  4693.  
  4694.  move.w 6(a2,d0*8),d3    ; left z val
  4695.  bgt.s .leftclipinfront
  4696.  addq #2,a0
  4697.  rts
  4698.  
  4699.  tst.w 6(a2,d0*8)
  4700.  bgt.s .leftnotoktoclip
  4701. .ignoreboth:
  4702. ; move.l #0,(a6)
  4703. ; move.l #96*65536,4(a6)
  4704.  move.w #0,leftclip
  4705.  move.w #96,rightclip
  4706.  addq #8,a6
  4707.  addq #2,a0
  4708.  rts
  4709.  
  4710. .leftclipinfront:
  4711.  move.w (a1,d0*2),d1    ; left x on screen
  4712.  move.w (a0),d2
  4713.  move.w 2(a3,d2.w*4),d2
  4714.  move.w (a1,d2.w*2),d2
  4715.  cmp.w d1,d2
  4716.  bgt.s .leftnotoktoclip
  4717.  
  4718. ; move.w d1,(a6)
  4719. ; move.w d3,2(a6)
  4720.  cmp.w leftclip,d1
  4721.  ble.s .leftnotoktoclip
  4722.  move.w d1,leftclip
  4723. .leftnotoktoclip:
  4724.  
  4725.  addq #2,a0
  4726.  
  4727.  rts
  4728.  
  4729. NEWsetrclip
  4730.  move.l #OnScreen,a1
  4731.  move.l #Rotated,a2
  4732.  move.l CONNECT_TABLE,a3
  4733.  move.w (a0),d0
  4734.  bge.s .notignoreright
  4735. ; move.w #96,4(a6)
  4736. ; move.w #0,6(a6)
  4737.  move.w #0,d4
  4738.  bra .rightnotoktoclip
  4739. .notignoreright:
  4740.  move.w 6(a2,d0*8),d4    ; right z val
  4741.  bgt.s .rightclipinfront
  4742. ; move.w #96,4(a6)
  4743. ; move.w #0,6(a6)
  4744.  bra.s .rightnotoktoclip
  4745.  
  4746. .rightclipinfront:
  4747.  move.w (a1,d0*2),d1    ; right x on screen
  4748.  move.w (a0),d2
  4749.  move.w (a3,d2.w*4),d2
  4750.  move.w (a1,d2.w*2),d2
  4751.  cmp.w d1,d2
  4752.  blt.s .rightnotoktoclip
  4753. ; move.w d1,4(a6)
  4754. ; move.w d4,6(a6)
  4755.  
  4756.  cmp.w rightclip,d1
  4757.  bge.s .rightnotoktoclip
  4758.  addq #1,d1
  4759.  move.w d1,rightclip
  4760. .rightnotoktoclip:
  4761.  addq #8,a6
  4762.  addq #2,a0
  4763.  rts
  4764.  
  4765. FIRSTsetlrclip:
  4766.  move.l #OnScreen,a1
  4767.  move.l #Rotated,a2
  4768.  
  4769.  move.w (a0)+,d0
  4770.  bge.s .notignoreleft
  4771.  bra .leftnotoktoclip
  4772. .notignoreleft:
  4773.  
  4774.  move.w 6(a2,d0*8),d3    ; left z val
  4775.  bgt.s .leftclipinfront
  4776.  
  4777.  move.w (a0),d0
  4778.  blt.s .ignoreboth
  4779.  tst.w 6(a2,d0*8)
  4780.  bgt.s .leftnotoktoclip
  4781. .ignoreboth
  4782.  move.w #96,rightclip
  4783.  move.w #0,leftclip
  4784.  addq #2,a0
  4785.  rts
  4786.  
  4787. .leftclipinfront:
  4788.  move.w (a1,d0*2),d1    ; left x on screen
  4789.  cmp.w leftclip,d1
  4790.  ble.s .leftnotoktoclip
  4791.  move.w d1,leftclip
  4792. .leftnotoktoclip:
  4793.  
  4794.  move.w (a0)+,d0
  4795.  bge.s .notignoreright
  4796.  move.w #0,d4
  4797.  bra .rightnotoktoclip
  4798. .notignoreright:
  4799.  move.w 6(a2,d0*8),d4    ; right z val
  4800.  ble.s .rightnotoktoclip
  4801.  
  4802. .rightclipinfront:
  4803.  move.w (a1,d0*2),d1    ; right x on screen
  4804.  addq #1,d1
  4805.  cmp.w rightclip,d1
  4806.  bge.s .rightnotoktoclip
  4807.  move.w d1,rightclip
  4808. .rightnotoktoclip:
  4809.  
  4810. ; move.w leftclip,d0
  4811. ; move.w rightclip,d1
  4812. ; cmp.w d0,d1
  4813. ; bge.s .noswap
  4814. ; move.w #96,rightclip
  4815. ; move.w #0,leftclip
  4816. ;.noswap:
  4817.  
  4818.  rts
  4819.  
  4820.  
  4821. leftclip2: dc.w 0
  4822. rightclip2: dc.w 0
  4823. ZoneBright: dc.w 0
  4824.  
  4825. npolys: dc.w 0
  4826.  
  4827. PLR1_fire: dc.b 0
  4828. PLR2_fire: dc.b 0
  4829.  
  4830. *****************************************************
  4831.  
  4832.  
  4833. pastdata:
  4834. ***********************************
  4835. * This routine animates brightnesses.
  4836.  
  4837.  
  4838. liftpt: dc.l liftanimtab
  4839.  
  4840. brightpt:
  4841.  dc.l brightanimtab
  4842.  
  4843.  
  4844. liftanim:
  4845.  rts
  4846.  
  4847. ******************************
  4848.  include "ab3:source/ObjectMove"
  4849.  include "ab3:source/Anims"
  4850. ******************************
  4851. startpass:
  4852. ; include "ab3:source/password_reloc.s"
  4853. endpass:
  4854.  
  4855. rotanimpt: dc.w 0
  4856. xradd: dc.w 5
  4857. yradd: dc.w 8
  4858. xrpos: dc.w 320
  4859. yrpos: dc.w 320
  4860.  
  4861. rotanim:
  4862.  rts
  4863.  
  4864. option:
  4865.  dc.l 0,0
  4866.  
  4867. ********** WALL STUFF *******************************
  4868.  
  4869.  include "AB3:source/wallroutine3.chipmem"
  4870.  
  4871. *****************************************************
  4872.  
  4873. ******************************************
  4874. * floor polygon
  4875.  
  4876. numsidestd: dc.w 0
  4877. bottomline: dc.w 0
  4878.  
  4879. checkforwater:
  4880.  tst.b usewater
  4881.  beq.s .notwater
  4882.  
  4883.  move.l Roompt,a1
  4884.  move.w (a1),d7
  4885.  cmp.w currzone,d7
  4886.  bne.s .notwater
  4887.  
  4888.  move.b #$f,fillscrnwater
  4889.  
  4890. .notwater:
  4891.  move.w (a0)+,d6    ; sides-1
  4892.  add.w d6,d6
  4893.  add.w d6,a0
  4894.  add.w #4+6,a0
  4895.  rts
  4896.  
  4897.  rts
  4898.  
  4899. NewCornerBuff:
  4900.  ds.l 100
  4901. CLRNOFLOOR: dc.w 0
  4902.  
  4903. itsafloordraw:
  4904.  
  4905. * If D0 =1 then its a floor otherwise (=2) it's
  4906. * a roof.
  4907.  
  4908.  move.w #0,above
  4909.  move.w (a0)+,d6    ; ypos of poly
  4910.  
  4911.  move.w d6,d7
  4912.  ext.l d7
  4913.  asl.l #6,d7
  4914.  cmp.l TOPOFROOM,d7
  4915.  blt checkforwater
  4916.  cmp.l BOTOFROOM,d7
  4917.  bgt.s dontdrawreturn
  4918.  
  4919.  move.w leftclip(pc),d7
  4920.  cmp.w rightclip(pc),d7
  4921.  bge.s dontdrawreturn
  4922.  
  4923.  move.w botclip,d7
  4924.  sub.w #40,d7
  4925.  ble.s dontdrawreturn
  4926.  sub.w flooryoff,d6
  4927.  bgt.s below
  4928.  blt.s aboveplayer
  4929.  
  4930.  tst.b usewater
  4931.  beq.s .notwater
  4932.  
  4933.  move.l Roompt,a1
  4934.  move.w (a1),d7
  4935.  cmp.w currzone,d7
  4936.  
  4937.  bne.s .notwater
  4938.  
  4939.  st fillscrnwater
  4940.  
  4941. .notwater:
  4942.  
  4943.  
  4944. dontdrawreturn:
  4945.  move.w (a0)+,d6    ; sides-1
  4946.  add.w d6,d6
  4947.  add.w d6,a0
  4948.  add.w #4+6,a0
  4949.  rts
  4950. aboveplayer:
  4951.  
  4952.  tst.b usewater
  4953.  beq.s .notwater
  4954.  
  4955.  move.l Roompt,a1
  4956.  move.w (a1),d7
  4957.  cmp.w currzone,d7
  4958.  bne.s .notwater
  4959.  
  4960.  move.b #$f,fillscrnwater
  4961.  
  4962. .notwater:
  4963.  
  4964.  btst #1,d0
  4965.  beq.s dontdrawreturn
  4966.  move.w #40,d7
  4967.  sub.w topclip,d7 
  4968.  ble.s dontdrawreturn
  4969.  move.w #1,d0
  4970.  move.w d0,above
  4971.  neg.w d6
  4972. below:
  4973.  btst #0,d0
  4974.  beq.s dontdrawreturn
  4975.  move.w d6,distaddr
  4976.  muls #64,d6
  4977.  move.l d6,ypos
  4978.  divs d7,d6        ; zpos of bottom
  4979.             ; visible line
  4980.  move.w d6,minz
  4981.  move.w d7,bottomline
  4982.  
  4983. ; Go round each point finding out
  4984. ; if it should be visible or not.
  4985.  
  4986.  move.l a0,-(a7)
  4987.  
  4988.  move.w (a0)+,d7    ; number of sides
  4989.  move.l #Rotated,a1
  4990.  move.l #OnScreen,a2
  4991.  move.l #NewCornerBuff,a3
  4992.  moveq #0,d4
  4993.  moveq #0,d5
  4994.  moveq #0,d6
  4995.  clr.b anyclipping
  4996.  
  4997. cornerprocessloop:
  4998.  
  4999.  move.w (a0)+,d0
  5000.  move.w 6(a1,d0.w*8),d1
  5001.  ble  .canttell
  5002.  
  5003.  move.w (a2,d0.w*2),d3
  5004.  cmp.w leftclip,d3
  5005.  bgt.s .nol
  5006.  st d4
  5007.  st anyclipping
  5008.  bra.s .nos
  5009. .nol:
  5010.  cmp.w rightclip,d3
  5011.  blt.s .nor
  5012.  st d6
  5013.  st anyclipping
  5014.  bra.s .nos
  5015. .nor:
  5016.  st d5
  5017. .nos:
  5018.  bra .cantell
  5019.  
  5020. .canttell:
  5021.  st d5
  5022.  st anyclipping
  5023.  
  5024. .cantell:
  5025.  
  5026.  
  5027.  dbra d7,cornerprocessloop
  5028.  
  5029.  move.l (a7)+,a0
  5030.  tst.b d5
  5031.  bne.s somefloortodraw
  5032.  eor.b d4,d6
  5033.  bne dontdrawreturn
  5034.  
  5035. somefloortodraw:
  5036.  
  5037.  tst.b gourfloor
  5038.  bne goursides
  5039.  
  5040.  move.w #80,top
  5041.  move.w #-1,bottom
  5042.  move.w #0,drawit
  5043.  move.l #Rotated,a1
  5044.  move.l #OnScreen,a2
  5045.  move.w (a0)+,d7    ; no of sides
  5046. sideloop:
  5047.  move.w minz,d6
  5048.  move.w (a0)+,d1
  5049.  move.w (a0),d3
  5050.  move.w 6(a1,d1*8),d4    ;first z
  5051.  cmp.w d6,d4
  5052.  bgt firstinfront
  5053.  move.w 6(a1,d3*8),d5    ; sec z
  5054.  cmp.w d6,d5
  5055.  ble bothbehind
  5056. ** line must be on left and partially behind.
  5057.  sub.w d5,d4
  5058.  move.l (a1,d1*8),d0
  5059.  sub.l (a1,d3*8),d0
  5060.  asr.l #7,d0
  5061.  sub.w d5,d6
  5062.  muls d6,d0    ; new x coord
  5063.  divs d4,d0
  5064.  ext.l d0
  5065.  asl.l #7,d0
  5066.  
  5067.  add.l (a1,d3*8),d0
  5068.  move.w minz,d4
  5069.  move.w (a2,d3*2),d2
  5070.  divs d4,d0
  5071.  add.w #47,d0
  5072.  move.l ypos,d3
  5073.  divs d5,d3
  5074.  move.w bottomline,d1 
  5075.  bra lineclipped
  5076.  
  5077. firstinfront:
  5078.  move.w 6(a1,d3*8),d5    ; sec z
  5079.  cmp.w d6,d5
  5080.  bgt bothinfront
  5081. ** line must be on right and partially behind.
  5082.  sub.w d4,d5    ; dz
  5083.  move.l (a1,d3*8),d2
  5084.  sub.l (a1,d1*8),d2    ; dx
  5085.  sub.w d4,d6
  5086.  asr.l #7,d2
  5087.  muls d6,d2    ; new x coord
  5088.  divs d5,d2
  5089.  ext.l d2
  5090.  asl.l #7,d2
  5091.  add.l (a1,d1*8),d2
  5092.  move.w minz,d5
  5093.  move.w (a2,d1*2),d0
  5094.  divs d5,d2
  5095.  add.w #47,d2
  5096.  move.l ypos,d1
  5097.  divs d4,d1
  5098.  move.w bottomline,d3 
  5099.  bra lineclipped
  5100.  
  5101. bothinfront:
  5102.  
  5103. * Also, usefully enough, both are on-screen
  5104. * so no bottom clipping is needed.
  5105.  
  5106.  move.w (a2,d1*2),d0    ; first x
  5107.  move.w (a2,d3*2),d2    ; second x
  5108.  move.l ypos,d1
  5109.  move.l d1,d3
  5110.  divs d4,d1        ; first y
  5111.  divs d5,d3        ; second y
  5112. lineclipped:
  5113.  move.l #rightsidetab,a3
  5114.  cmp.w d1,d3
  5115.  beq lineflat
  5116.  st drawit
  5117.  bgt lineonright
  5118.  move.l #leftsidetab,a3
  5119.  exg d1,d3
  5120.  exg d0,d2
  5121.  
  5122.  lea (a3,d1*2),a3
  5123.  
  5124.  cmp.w top(pc),d1
  5125.  bge.s .nonewtop
  5126.  move.w d1,top
  5127. .nonewtop:
  5128.  cmp.w bottom(pc),d3
  5129.  ble.s .nonewbot
  5130.  move.w d3,bottom
  5131. .nonewbot:
  5132.  
  5133.  sub.w d1,d3    ; dy
  5134.  sub.w d0,d2    ; dx
  5135.  
  5136.  blt .linegoingleft
  5137.  sub.w #1,d0
  5138.  
  5139.  ext.l d2
  5140.  divs d3,d2
  5141.  move.w d2,d6
  5142.  swap d2
  5143.  
  5144. ; moveq #0,d6
  5145. ; sub.w d3,d2
  5146. ; blt.s .noco
  5147. ;.makeco
  5148. ; addq #1,d6
  5149. ; sub.w d3,d2
  5150. ; bge.s .makeco
  5151. ;.noco
  5152. ; add.w d3,d2
  5153.  
  5154.  move.w d3,d4
  5155.  move.w d3,d5
  5156.  subq #1,d5
  5157.  move.w d6,d1
  5158.  addq #1,d1
  5159.  
  5160. .pixlopright:
  5161.  move.w d0,(a3)+
  5162.  sub.w d2,d4
  5163.  bge.s .nobigstep
  5164.  add.w d1,d0
  5165.  add.w d3,d4
  5166.  dbra d5,.pixlopright
  5167.  bra lineflat
  5168. .nobigstep
  5169.  add.w d6,d0
  5170.  dbra d5,.pixlopright
  5171.  bra lineflat
  5172.  
  5173. .linegoingleft:
  5174.  
  5175.  sub.w #1,d0
  5176.  
  5177.  neg.w d2
  5178.  
  5179.  ext.l d2
  5180.  divs d3,d2
  5181.  move.w d2,d6
  5182.  swap d2
  5183.  
  5184.  
  5185. ; moveq #0,d6
  5186. ; sub.w d3,d2
  5187. ; blt.s .nocol
  5188. ;.makecol
  5189. ; addq #1,d6
  5190. ; sub.w d3,d2
  5191. ; bge.s .makecol
  5192. ;.nocol
  5193. ; add.w d3,d2
  5194.  
  5195.  
  5196.  
  5197.  move.w d3,d4
  5198.  move.w d3,d5
  5199.  subq #1,d5
  5200.  
  5201.  move.w d6,d1
  5202.  addq #1,d1
  5203.  
  5204. .pixlopleft:
  5205.  sub.w d2,d4
  5206.  bge.s .nobigstepl
  5207.  sub.w d1,d0
  5208.  add.w d3,d4
  5209.  move.w d0,(a3)+
  5210.  dbra d5,.pixlopleft
  5211.  bra lineflat
  5212.  
  5213. .nobigstepl
  5214.  sub.w d6,d0
  5215.  move.w d0,(a3)+
  5216.  dbra d5,.pixlopleft
  5217.  bra lineflat
  5218.  
  5219. lineonright:
  5220.  
  5221.  lea (a3,d1*2),a3
  5222.  
  5223.  cmp.w top(pc),d1
  5224.  bge.s .nonewtop
  5225.  move.w d1,top
  5226. .nonewtop:
  5227.  cmp.w bottom(pc),d3
  5228.  ble.s .nonewbot
  5229.  move.w d3,bottom
  5230. .nonewbot:
  5231.  
  5232.  sub.w d1,d3    ; dy
  5233.  sub.w d0,d2    ; dx
  5234.  blt .linegoingleft
  5235. ; addq #1,d0
  5236.  ext.l d2
  5237.  divs d3,d2
  5238.  move.w d2,d6
  5239.  swap d2
  5240.  
  5241. ; moveq #0,d6
  5242. ; sub.w d3,d2
  5243. ; blt.s .noco
  5244. ;.makeco
  5245. ; addq #1,d6
  5246. ; sub.w d3,d2
  5247. ; bge.s .makeco
  5248. ;.noco
  5249. ; add.w d3,d2
  5250.  
  5251.  move.w d3,d4
  5252.  move.w d3,d5
  5253.  subq #1,d5
  5254.  move.w d6,d1
  5255.  addq #1,d1
  5256.  
  5257. .pixlopright:
  5258.  sub.w d2,d4
  5259.  bge.s .nobigstep
  5260.  add.w d1,d0
  5261.  add.w d3,d4
  5262.  move.w d0,(a3)+
  5263.  dbra d5,.pixlopright
  5264.  bra lineflat
  5265.  
  5266. .nobigstep
  5267.  add.w d6,d0
  5268.  move.w d0,(a3)+
  5269.  dbra d5,.pixlopright
  5270.  bra lineflat
  5271.  
  5272. .linegoingleft:
  5273. ; addq #1,d0
  5274.  neg.w d2
  5275.  
  5276.  ext.l d2
  5277.  divs d3,d2
  5278.  move.w d2,d6
  5279.  swap d2
  5280.  
  5281.  
  5282. ; moveq #0,d6
  5283. ; sub.w d3,d2
  5284. ; blt.s .nocol
  5285. ;.makecol
  5286. ; addq #1,d6
  5287. ; sub.w d3,d2
  5288. ; bge.s .makecol
  5289. ;.nocol
  5290. ; add.w d3,d2
  5291.  
  5292.  move.w d3,d4
  5293.  move.w d3,d5
  5294.  subq #1,d5
  5295.  move.w d6,d1
  5296.  addq #1,d1
  5297.  
  5298. .pixlopleft:
  5299.  move.w d0,(a3)+
  5300.  sub.w d2,d4
  5301.  bge.s .nobigstepl
  5302.  sub.w d1,d0
  5303.  add.w d3,d4
  5304.  dbra d5,.pixlopleft
  5305.  bra lineflat
  5306.  
  5307. .nobigstepl
  5308.  sub.w d6,d0
  5309.  dbra d5,.pixlopleft
  5310.  
  5311. lineflat:
  5312.  
  5313. bothbehind:
  5314.  dbra d7,sideloop
  5315.  bra pastsides
  5316.  
  5317. fbr: dc.w 0
  5318. sbr: dc.w 0
  5319.  
  5320. goursides:
  5321.  
  5322.  move.w #80,top
  5323.  move.w #-1,bottom
  5324.  move.w #0,drawit
  5325.  move.l #Rotated,a1
  5326.  move.l #OnScreen,a2
  5327.  move.w (a0)+,d7    ; no of sides
  5328. sideloopGOUR:
  5329.  move.w minz,d6
  5330.  move.w (a0)+,d1
  5331.  move.w (a0),d3
  5332.  
  5333.  move.l PointBrightsPtr,a4
  5334.  move.w (a4,d1.w*4),fbr
  5335.  move.w (a4,d3.w*4),sbr
  5336.  
  5337.  move.w 6(a1,d1*8),d4    ;first z
  5338.  cmp.w d6,d4
  5339.  bgt firstinfrontGOUR
  5340.  move.w 6(a1,d3*8),d5    ; sec z
  5341.  cmp.w d6,d5
  5342.  ble bothbehindGOUR
  5343. ** line must be on left and partially behind.
  5344.  sub.w d5,d4
  5345.  
  5346.  move.w fbr,d0
  5347.  sub.w sbr,d0
  5348.  sub.w d5,d6
  5349.  muls d6,d0
  5350.  divs d4,d0
  5351.  add.w sbr,d0
  5352.  move.w d0,fbr
  5353.  
  5354.  move.l (a1,d1*8),d0
  5355.  sub.l (a1,d3*8),d0
  5356.  asr.l #7,d0
  5357.  muls d6,d0    ; new x coord
  5358.  divs d4,d0
  5359.  ext.l d0
  5360.  asl.l #7,d0
  5361.  
  5362.  add.l (a1,d3*8),d0
  5363.  move.w minz,d4
  5364.  move.w (a2,d3*2),d2
  5365.  divs d4,d0
  5366.  add.w #47,d0
  5367.  move.l ypos,d3
  5368.  divs d5,d3
  5369.  
  5370.  move.w bottomline,d1 
  5371.  bra lineclippedGOUR
  5372.  
  5373. firstinfrontGOUR:
  5374.  move.w 6(a1,d3*8),d5    ; sec z
  5375.  cmp.w d6,d5
  5376.  bgt bothinfrontGOUR
  5377. ** line must be on right and partially behind.
  5378.  sub.w d4,d5    ; dz
  5379.  
  5380.  move.w sbr,d2
  5381.  sub.w fbr,d2
  5382.  sub.w d4,d6
  5383.  muls d6,d2
  5384.  divs d5,d2
  5385.  add.w fbr,d2
  5386.  move.w d2,sbr
  5387.  
  5388.  move.l (a1,d3*8),d2
  5389.  sub.l (a1,d1*8),d2    ; dx
  5390.  asr.l #7,d2
  5391.  muls d6,d2    ; new x coord
  5392.  divs d5,d2
  5393.  ext.l d2
  5394.  asl.l #7,d2
  5395.  add.l (a1,d1*8),d2
  5396.  move.w minz,d5
  5397.  move.w (a2,d1*2),d0
  5398.  divs d5,d2
  5399.  add.w #47,d2
  5400.  move.l ypos,d1
  5401.  divs d4,d1
  5402.  move.w bottomline,d3 
  5403.  bra lineclippedGOUR
  5404.  
  5405. bothinfrontGOUR:
  5406.  
  5407. * Also, usefully enough, both are on-screen
  5408. * so no bottom clipping is needed.
  5409.  
  5410.  move.w (a2,d1*2),d0    ; first x
  5411.  move.w (a2,d3*2),d2    ; second x
  5412.  move.l ypos,d1
  5413.  move.l d1,d3
  5414.  divs d4,d1        ; first y
  5415.  divs d5,d3        ; second y
  5416. lineclippedGOUR:
  5417.  move.l #rightsidetab,a3
  5418.  cmp.w d1,d3
  5419.  bne linenotflatGOUR
  5420.  
  5421. ; move.w fbr,d4
  5422. ; move.w sbr,d5
  5423. ; cmp.w d0,d2
  5424. ; bgt.s .nsw
  5425. ; exg d4,d5
  5426. ;.nsw:
  5427.  
  5428. ; move.l #leftbrighttab,a3
  5429. ; move.w d4,(a3,d3.w)
  5430. ; move.l #rightbrighttab,a3
  5431. ; move.w d5,(a3,d3.w) 
  5432.  bra lineflatGOUR
  5433.  
  5434. linenotflatGOUR
  5435.  st drawit
  5436.  bgt lineonrightGOUR
  5437.  move.l #leftsidetab,a3
  5438.  exg d1,d3
  5439.  exg d0,d2
  5440.  
  5441.  lea (a3,d1*2),a3
  5442.  lea leftbrighttab-leftsidetab(a3),a4
  5443.  
  5444.  cmp.w top(pc),d1
  5445.  bge.s .nonewtop
  5446.  move.w d1,top
  5447. .nonewtop:
  5448.  cmp.w bottom(pc),d3
  5449.  ble.s .nonewbot
  5450.  move.w d3,bottom
  5451. .nonewbot:
  5452.  
  5453.  sub.w d1,d3    ; dy
  5454.  sub.w d0,d2    ; dx
  5455.  
  5456.  blt .linegoingleft
  5457.  sub.w #1,d0
  5458.  
  5459.  ext.l d2
  5460.  divs d3,d2
  5461.  move.w d2,d6
  5462.  swap d2
  5463.  move.w d2,a5
  5464.  
  5465. ; moveq #0,d6
  5466. ; sub.w d3,d2
  5467. ; blt.s .noco
  5468. ;.makeco
  5469. ; addq #1,d6
  5470. ; sub.w d3,d2
  5471. ; bge.s .makeco
  5472. ;.noco
  5473. ; add.w d3,d2
  5474.  
  5475.  move.w d3,d4
  5476.  move.w d3,d5
  5477.  subq #1,d5
  5478.  move.w d6,d1
  5479.  addq #1,d1
  5480.  move.w d1,a6
  5481.  
  5482.  moveq #0,d1
  5483.  move.w sbr,d1
  5484.  move.w fbr,d2
  5485.  sub.w d1,d2
  5486.  ext.l d2
  5487.  asl.w #8,d2
  5488.  asl.w #3,d2
  5489.  divs d3,d2 
  5490.  ext.l d2
  5491.  asl.l #5,d2
  5492.  swap d1
  5493.  
  5494. .pixlopright:
  5495.  move.w d0,(a3)+
  5496.  swap d1
  5497.  move.w d1,(a4)+
  5498.  swap d1
  5499.  add.l d2,d1
  5500.  
  5501.  sub.w a5,d4
  5502.  bge.s .nobigstep
  5503.  add.w a6,d0
  5504.  add.w d3,d4
  5505.  dbra d5,.pixlopright
  5506.  bra lineflatGOUR
  5507. .nobigstep
  5508.  
  5509.  add.w d6,d0
  5510.  dbra d5,.pixlopright
  5511.  bra lineflatGOUR
  5512.  
  5513. .linegoingleft:
  5514.  
  5515.  sub.w #1,d0
  5516.  
  5517.  neg.w d2
  5518.  
  5519.  ext.l d2
  5520.  divs d3,d2
  5521.  move.w d2,d6
  5522.  swap d2
  5523.  
  5524.  
  5525. ; moveq #0,d6
  5526. ; sub.w d3,d2
  5527. ; blt.s .nocol
  5528. ;.makecol
  5529. ; addq #1,d6
  5530. ; sub.w d3,d2
  5531. ; bge.s .makecol
  5532. ;.nocol
  5533. ; add.w d3,d2
  5534.  
  5535.  move.w d3,d4
  5536.  move.w d3,d5
  5537.  subq #1,d5
  5538.  
  5539.  move.w d6,d1
  5540.  addq #1,d1
  5541.  move.w d1,a6
  5542.  move.w d2,a5
  5543.  
  5544.  moveq #0,d1
  5545.  move.w sbr,d1
  5546.  move.w fbr,d2
  5547.  sub.w d1,d2
  5548.  ext.l d2
  5549.  asl.w #8,d2
  5550.  asl.w #3,d2
  5551.  divs d3,d2 
  5552.  ext.l d2
  5553.  asl.l #5,d2
  5554.  swap d1
  5555.  
  5556. .pixlopleft:
  5557.  
  5558.  swap d1
  5559.  move.w d1,(a4)+
  5560.  swap d1
  5561.  add.l d2,d1
  5562.  
  5563.  sub.w a5,d4
  5564.  bge.s .nobigstepl
  5565.  sub.w a6,d0
  5566.  add.w d3,d4
  5567.  move.w d0,(a3)+
  5568.  dbra d5,.pixlopleft
  5569.  bra lineflatGOUR
  5570.  
  5571. .nobigstepl
  5572.  sub.w d6,d0
  5573.  move.w d0,(a3)+
  5574.  dbra d5,.pixlopleft
  5575.  bra lineflatGOUR
  5576.  
  5577. lineonrightGOUR:
  5578.  
  5579.  lea (a3,d1*2),a3
  5580.  
  5581.  lea rightbrighttab-rightsidetab(a3),a4
  5582.  
  5583.  cmp.w top(pc),d1
  5584.  bge.s .nonewtop
  5585.  move.w d1,top
  5586. .nonewtop:
  5587.  cmp.w bottom(pc),d3
  5588.  ble.s .nonewbot
  5589.  move.w d3,bottom
  5590. .nonewbot:
  5591.  
  5592.  sub.w d1,d3    ; dy
  5593.  sub.w d0,d2    ; dx
  5594.  blt .linegoingleft
  5595. ; addq #1,d0
  5596.  ext.l d2
  5597.  divs d3,d2
  5598.  move.w d2,d6
  5599.  swap d2
  5600.  
  5601. ; moveq #0,d6
  5602. ; sub.w d3,d2
  5603. ; blt.s .noco
  5604. ;.makeco
  5605. ; addq #1,d6
  5606. ; sub.w d3,d2
  5607. ; bge.s .makeco
  5608. ;.noco
  5609. ; add.w d3,d2
  5610.  
  5611.  move.w d3,d4
  5612.  move.w d3,d5
  5613.  subq #1,d5
  5614.  move.w d6,d1
  5615.  addq #1,d1
  5616.  
  5617.  move.w d1,a6
  5618.  move.w d2,a5
  5619.  
  5620.  moveq #0,d1
  5621.  move.w fbr,d1
  5622.  move.w sbr,d2
  5623.  sub.w d1,d2
  5624.  ext.l d2
  5625.  asl.w #8,d2
  5626.  asl.w #3,d2
  5627.  divs d3,d2 
  5628.  ext.l d2
  5629.  asl.l #5,d2
  5630.  swap d1
  5631.  
  5632. .pixlopright:
  5633.  
  5634.  swap d1
  5635.  move.w d1,(a4)+
  5636.  swap d1
  5637.  add.l d2,d1
  5638.  
  5639.  sub.w a5,d4
  5640.  bge.s .nobigstep
  5641.  add.w a6,d0
  5642.  add.w d3,d4
  5643.  move.w d0,(a3)+
  5644.  dbra d5,.pixlopright
  5645.  bra lineflatGOUR
  5646.  
  5647. .nobigstep
  5648.  add.w d6,d0
  5649.  move.w d0,(a3)+
  5650.  dbra d5,.pixlopright
  5651.  bra lineflatGOUR
  5652.  
  5653. .linegoingleft:
  5654. ; addq #1,d0
  5655.  neg.w d2
  5656.  
  5657.  ext.l d2
  5658.  divs d3,d2
  5659.  move.w d2,d6
  5660.  swap d2
  5661.  
  5662.  
  5663. ; moveq #0,d6
  5664. ; sub.w d3,d2
  5665. ; blt.s .nocol
  5666. ;.makecol
  5667. ; addq #1,d6
  5668. ; sub.w d3,d2
  5669. ; bge.s .makecol
  5670. ;.nocol
  5671. ; add.w d3,d2
  5672.  
  5673.  move.w d3,d4
  5674.  move.w d3,d5
  5675.  subq #1,d5
  5676.  move.w d6,d1
  5677.  addq #1,d1
  5678.  move.w d1,a6
  5679.  move.w d2,a5
  5680.  
  5681.  moveq #0,d1
  5682.  move.w fbr,d1
  5683.  move.w sbr,d2
  5684.  sub.w d1,d2
  5685.  ext.l d2
  5686.  asl.w #8,d2
  5687.  asl.w #3,d2
  5688.  divs d3,d2 
  5689.  ext.l d2
  5690.  asl.l #5,d2
  5691.  swap d1
  5692.  
  5693. .pixlopleft:
  5694.  
  5695.  swap d1
  5696.  move.w d1,(a4)+
  5697.  swap d1
  5698.  add.l d2,d1
  5699.  
  5700.  move.w d0,(a3)+
  5701.  sub.w a5,d4
  5702.  bge.s .nobigstepl
  5703.  sub.w a6,d0
  5704.  add.w d3,d4
  5705.  dbra d5,.pixlopleft
  5706.  bra lineflatGOUR
  5707.  
  5708. .nobigstepl
  5709.  sub.w d6,d0
  5710.  dbra d5,.pixlopleft
  5711.  
  5712. lineflatGOUR:
  5713.  
  5714. bothbehindGOUR:
  5715.  dbra d7,sideloopGOUR
  5716.  
  5717. pastsides:
  5718.  
  5719.  
  5720.  addq #2,a0
  5721.  
  5722.  move.w #104*4,linedir
  5723.  move.l frompt,a6
  5724.  add.l #104*4*41,a6
  5725.  move.w (a0)+,scaleval
  5726.  move.w (a0)+,whichtile
  5727.  move.w (a0)+,d6
  5728.  add.w ZoneBright,d6
  5729.  move.w d6,lighttype
  5730.  move.w above(pc),d6
  5731.  beq groundfloor
  5732. * on ceiling:
  5733.  move.w #-104*4,linedir
  5734.  suba.w #104*4,a6
  5735. groundfloor:
  5736.  
  5737.  move.w xoff,d6
  5738.  move.w zoff,d7
  5739.  add.w xwobxoff,d7
  5740.  add.w xwobzoff,d6
  5741.  swap d6
  5742.  swap d7
  5743.  clr.w d6
  5744.  clr.w d7
  5745.  move.w scaleval(pc),d3
  5746.  beq.s .samescale
  5747.  bgt.s .scaledown
  5748.  neg.w d3
  5749.  asr.l d3,d7
  5750.  asr.l d3,d6
  5751.  bra.s .samescale
  5752. .scaledown:
  5753.  asl.l d3,d6
  5754.  asl.l d3,d7
  5755. .samescale
  5756.  move.l d6,sxoff
  5757.  move.l d7,szoff
  5758.  bra pastscale 
  5759.  
  5760.  asr.l #3,d1
  5761.  asr.l #3,d2
  5762.  asr.l #2,d1
  5763.  asr.l #2,d2
  5764.  asr.l #1,d1
  5765.  asr.l #1,d2
  5766. scaleprogfrom
  5767.  nop
  5768.  nop
  5769.  asl.l #1,d1
  5770.  asl.l #1,d2
  5771.  asl.l #2,d1
  5772.  asl.l #2,d2
  5773.  asl.l #3,d1
  5774.  asl.l #3,d2
  5775.  
  5776. top: dc.w 0
  5777. bottom: dc.w 0
  5778. ypos: dc.l 0
  5779. nfloors: dc.w 0
  5780. lighttype: dc.w 0
  5781. above: dc.w 0 
  5782. linedir: dc.w 0
  5783. distaddr: dc.w 0
  5784.  
  5785. minz: dc.w 0
  5786. leftsidetab:
  5787.  ds.w 180
  5788. rightsidetab:
  5789.  ds.w 180
  5790. leftbrighttab:
  5791.  ds.w 180
  5792. rightbrighttab:
  5793.  ds.w 180
  5794.  
  5795. PointBrights:
  5796.  dc.l 0
  5797. CurrentPointBrights:
  5798.  ds.l 1000
  5799.  
  5800. movespd: dc.w 0
  5801. largespd: dc.l 0
  5802. disttobot: dc.w 0
  5803.  
  5804. pastscale:
  5805.  
  5806.  tst.b drawit(pc)
  5807.  beq dontdrawfloor
  5808.  
  5809.  move.l a0,-(a7)
  5810.  
  5811.  move.l #leftsidetab,a4
  5812.  move.w top(pc),d1
  5813.  
  5814.  move.w #39,d7
  5815.  sub.w d1,d7
  5816.  move.w d7,disttobot
  5817.  
  5818.  move.w bottom(pc),d7
  5819.  tst.w above
  5820.  beq.s clipfloor
  5821.  
  5822.  move.w #40,d3
  5823.  move.w d3,d4
  5824.  sub.w topclip,d3
  5825.  sub.w botclip,d4
  5826.  cmp.w d3,d1
  5827.  bge predontdrawfloor
  5828.  cmp.w d4,d7
  5829.  blt predontdrawfloor
  5830.  cmp.w d4,d1
  5831.  bge.s .nocliptoproof
  5832.  move.w d4,d1
  5833. .nocliptoproof
  5834.  cmp.w d3,d7
  5835.  blt doneclip
  5836.  move.w d3,d7
  5837.  bra doneclip
  5838.  
  5839. clipfloor:
  5840.  move.w botclip,d4
  5841.  sub.w #40,d4
  5842.  cmp.w d4,d1
  5843.  bge predontdrawfloor
  5844.  move.w topclip,d3
  5845.  sub.w #40,d3
  5846.  cmp.w d3,d1
  5847.  bge.s .nocliptopfloor
  5848.  move.w d3,d1
  5849. .nocliptopfloor 
  5850.  cmp.w d3,d7
  5851.  ble predontdrawfloor
  5852.  cmp.w d4,d7
  5853.  blt.s .noclipbotfloor
  5854.  move.w d4,d7
  5855. .noclipbotfloor:
  5856.  
  5857. doneclip:
  5858.  
  5859.  lea (a4,d1*2),a4
  5860. ; move.l #dists,a2
  5861.  move.w distaddr,d0
  5862.  muls #64,d0
  5863.  move.l d0,a2
  5864. ; muls #25,d0
  5865. ; adda.w d0,a2
  5866. ; lea (a2,d1*2),a2
  5867.  sub.w d1,d7
  5868.  ble predontdrawfloor 
  5869.  move.w d1,d0
  5870.  bne.s .notzero
  5871.  moveq #1,d0
  5872. .notzero
  5873.  muls linedir,d1
  5874.  add.l d1,a6
  5875.  move.l #floorscalecols,a1
  5876.  move.l LineToUse,a5
  5877.  
  5878.  tst.b gourfloor
  5879.  bne dogourfloor
  5880.  
  5881.  tst.b anyclipping
  5882.  beq dofloornoclip
  5883.  
  5884. dofloor:
  5885. ; move.w (a2)+,d0
  5886.  move.w leftclip(pc),d3
  5887.  move.w rightclip(pc),d4
  5888.  move.w rightsidetab-leftsidetab(a4),d2
  5889.  
  5890.  addq #1,d2
  5891.  cmp.w d3,d2
  5892.  ble.s nodrawline
  5893.  cmp.w d4,d2
  5894.  ble.s noclipright
  5895.  move.w d4,d2
  5896. noclipright:
  5897.  move.w (a4),d1
  5898.  cmp.w d4,d1
  5899.  bge.s nodrawline
  5900.  cmp.w d3,d1
  5901.  bge.s noclipleft
  5902.  move.w d3,d1
  5903. noclipleft:
  5904.  cmp.w d1,d2
  5905.  ble.s nodrawline
  5906.  
  5907.  move.w d1,leftedge
  5908.  move.w d2,rightedge
  5909.  
  5910. ; moveq #0,d1
  5911. ; moveq #0,d3
  5912. ; move.w leftbrighttab-leftsidetab(a4),d1
  5913. ; bge.s .okbl
  5914. ; moveq #0,d1
  5915. ;.okbl:
  5916.  
  5917. ; move.w rightbrighttab-leftsidetab(a4),d3
  5918. ; bge.s .okbr
  5919. ; moveq #0,d3
  5920. ;.okbr:
  5921.  
  5922. ; sub.w d1,d3
  5923. ; asl.w #8,d1
  5924. ; move.l d1,leftbright
  5925. ; swap d3
  5926. ; asr.l #5,d3
  5927. ; divs d5,d3
  5928. ; move.w d3,d5
  5929. ; muls.w d6,d5
  5930. ; asr.l #3,d5
  5931. ; clr.b d5
  5932. ; add.w d5,leftbright+2
  5933.  
  5934. ; ext.l d3
  5935. ; asl.l #5,d3
  5936. ; swap d3
  5937. ; asl.w #8,d3
  5938. ; move.l d3,brightspd
  5939.  
  5940.  move.l a6,a3
  5941.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  5942.  move.l a2,d7
  5943.  divs d0,d7
  5944.  move.w d7,d0
  5945.  jsr (a5)
  5946.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  5947. nodrawline
  5948.  sub.w #1,disttobot
  5949.  adda.w linedir(pc),a6
  5950.  addq #2,a4
  5951.  addq #1,d0
  5952.  subq #1,d7
  5953.  bgt dofloor
  5954.  
  5955. predontdrawfloor
  5956.  move.l (a7)+,a0
  5957.  
  5958. dontdrawfloor:
  5959.  
  5960.  CACHE_FREEZE_OFF d2
  5961.  rts
  5962.  
  5963. anyclipping: dc.w 0
  5964.  
  5965. dofloornoclip:
  5966. ; move.w (a2)+,d0
  5967.  move.w rightsidetab-leftsidetab(a4),d2
  5968.  addq #1,d2
  5969.  move.w (a4)+,d1
  5970.  move.w d1,leftedge
  5971.  move.w d2,rightedge
  5972.  
  5973. ; sub.w d1,d2
  5974.  
  5975. ; moveq #0,d1
  5976. ; moveq #0,d3
  5977. ; move.w leftbrighttab-leftsidetab(a4),d1
  5978. ; bge.s .okbl
  5979. ; moveq #0,d1
  5980. ;.okbl:
  5981.  
  5982. ; move.w rightbrighttab-leftsidetab(a4),d3
  5983. ; bge.s .okbr
  5984. ; moveq #0,d3
  5985. ;.okbr:
  5986.  
  5987. ; sub.w d1,d3
  5988. ; asl.w #8,d1
  5989. ; move.l d1,leftbright
  5990. ; swap d3
  5991. ; asr.l #5,d3
  5992. ; divs d2,d3
  5993. ; ext.l d3
  5994. ; asl.l #5,d3
  5995. ; swap d3
  5996. ; asl.w #8,d3
  5997. ; move.l d3,brightspd
  5998.  
  5999.  move.l a6,a3
  6000.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6001.  move.l a2,d7
  6002.  divs d0,d7
  6003.  move.w d7,d0
  6004.  jsr (a5)
  6005.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6006.  sub.w #1,disttobot
  6007.  adda.w linedir(pc),a6
  6008.  addq #1,d0
  6009.  subq #1,d7
  6010.  bgt dofloornoclip
  6011.  
  6012.  bra predontdrawfloor
  6013.  
  6014. dogourfloor:
  6015.  tst.b anyclipping
  6016.  beq dofloornoclipGOUR
  6017.  
  6018. dofloorGOUR:
  6019. ; move.w (a2)+,d0
  6020.  move.w leftclip(pc),d3
  6021.  move.w rightclip(pc),d4
  6022.  move.w rightsidetab-leftsidetab(a4),d2
  6023.  
  6024.  move.w d2,d5
  6025.  sub.w (a4),d5
  6026.  addq #1,d5
  6027.  moveq #0,d6
  6028.  
  6029.  addq #1,d2
  6030.  cmp.w d3,d2
  6031.  ble nodrawlineGOUR
  6032.  cmp.w d4,d2
  6033.  ble.s nocliprightGOUR
  6034.  move.w d4,d2
  6035. nocliprightGOUR:
  6036.  move.w (a4),d1
  6037.  cmp.w d4,d1
  6038.  bge nodrawlineGOUR
  6039.  cmp.w d3,d1
  6040.  bge.s noclipleftGOUR
  6041.  move.w d3,d6
  6042.  subq #1,d6
  6043.  sub.w d1,d6
  6044.  move.w d3,d1
  6045. noclipleftGOUR:
  6046.  cmp.w d1,d2
  6047.  ble nodrawlineGOUR
  6048.  
  6049.  move.w d1,leftedge
  6050.  move.w d2,rightedge
  6051.  
  6052.  move.l a2,d2
  6053.  divs d0,d2
  6054.  move.w d2,dst
  6055.  asr.w #7,d2
  6056. ; addq #5,d2
  6057. ; add.w lighttype,d2
  6058.  
  6059.  moveq #0,d1
  6060.  moveq #0,d3
  6061.  move.w leftbrighttab-leftsidetab(a4),d1
  6062.  add.w d2,d1
  6063.  bge.s .okbl
  6064.  moveq #0,d1
  6065. .okbl:
  6066.  asr.w #1,d1
  6067.  cmp.w #14,d1
  6068.  ble.s .okdl
  6069.  move.w #14,d1
  6070. .okdl:
  6071.  
  6072.  move.w rightbrighttab-leftsidetab(a4),d3
  6073.  add.w d2,d3
  6074.  bge.s .okbr
  6075.  moveq #0,d3
  6076. .okbr:
  6077.  asr.w #1,d3
  6078.  cmp.w #14,d3
  6079.  ble.s .okdr
  6080.  move.w #14,d3
  6081. .okdr:
  6082.  
  6083.  sub.w d1,d3
  6084.  asl.w #8,d1
  6085.  move.l d1,leftbright
  6086.  swap d3
  6087.  tst.l d3
  6088.  bgt.s .OKITSPOSALREADY 
  6089.  neg.l d3
  6090.  asr.l #5,d3
  6091.  divs d5,d3
  6092.  neg.w d3
  6093.  bra.s .OKNOWITSNEG
  6094.  
  6095. .OKITSPOSALREADY
  6096.  asr.l #5,d3
  6097.  divs d5,d3
  6098. .OKNOWITSNEG
  6099.  muls d3,d6
  6100.  add.w #256*8,d6
  6101.  asr.w #3,d6
  6102.  clr.b d6
  6103.  add.w d6,leftbright+2
  6104.  
  6105.  ext.l d3
  6106.  asl.l #5,d3
  6107.  swap d3
  6108.  asl.w #8,d3
  6109.  move.l d3,brightspd
  6110.  
  6111.  move.l a6,a3
  6112.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6113.  move.w dst,d0
  6114.  lea floorscalecols,a1
  6115.  move.l floortile,a0
  6116.  adda.w whichtile,a0
  6117.  jsr pastfloorbright
  6118.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6119. nodrawlineGOUR
  6120.  
  6121.  sub.w #1,disttobot
  6122.  
  6123.  adda.w linedir(pc),a6
  6124.  addq #2,a4
  6125.  addq #1,d0
  6126.  subq #1,d7
  6127.  bgt dofloorGOUR
  6128.  
  6129. predontdrawfloorGOUR
  6130.  move.l (a7)+,a0
  6131.  
  6132. dontdrawfloorGOUR:
  6133.  
  6134.  CACHE_FREEZE_OFF d2
  6135.  rts
  6136.  
  6137. dofloornoclipGOUR:
  6138. ; move.w (a2)+,d0
  6139.  move.w rightsidetab-leftsidetab(a4),d2
  6140.  addq #1,d2
  6141.  move.w (a4),d1
  6142.  move.w d1,leftedge
  6143.  move.w d2,rightedge
  6144.  
  6145.  sub.w d1,d2
  6146.  
  6147.  move.l a2,d6
  6148.  divs d0,d6
  6149.  move.w d6,d5
  6150.  asr.w #7,d5
  6151. ; addq #5,d5
  6152. ; add.w lighttype,d5
  6153.  
  6154.  moveq #0,d1
  6155.  moveq #0,d3
  6156.  move.w leftbrighttab-leftsidetab(a4),d1
  6157.  add.w d5,d1
  6158.  bge.s .okbl
  6159.  moveq #0,d1
  6160. .okbl:
  6161.  asr.w #1,d1
  6162.  cmp.w #14,d1
  6163.  ble.s .okdl
  6164.  move.w #14,d1
  6165. .okdl:
  6166.  
  6167.  move.w rightbrighttab-leftsidetab(a4),d3
  6168.  add.w d5,d3
  6169.  bge.s .okbr
  6170.  moveq #0,d3
  6171. .okbr:
  6172.  asr.w #1,d3
  6173.  cmp.w #14,d3
  6174.  ble.s .okdr
  6175.  move.w #14,d3
  6176. .okdr:
  6177.  
  6178.  sub.w d1,d3
  6179.  asl.w #8,d1
  6180.  move.l d1,leftbright
  6181.  swap d3
  6182.  asr.l #5,d3
  6183.  divs d2,d3
  6184.  ext.l d3
  6185.  asl.l #5,d3
  6186.  swap d3
  6187.  asl.w #8,d3
  6188.  move.l d3,brightspd
  6189.  
  6190.  
  6191.  move.l a6,a3
  6192.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6193.  move.w d6,d0
  6194.  move.w d0,dst
  6195.  lea floorscalecols,a1
  6196.  move.l floortile,a0
  6197.  adda.w whichtile,a0
  6198.  jsr pastfloorbright
  6199.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6200.  sub.w #1,disttobot
  6201.  adda.w linedir(pc),a6
  6202.  addq #2,a4
  6203.  addq #1,d0
  6204.  subq #1,d7
  6205.  bgt dofloornoclipGOUR
  6206.  
  6207.  bra predontdrawfloorGOUR
  6208.  
  6209.  
  6210.  
  6211. dists:
  6212. ; incbin "floordists"
  6213. drawit: dc.w 0
  6214.  
  6215. LineToUse: dc.l 0
  6216.  
  6217. ***************************
  6218. * Right then, time for the floor
  6219. * routine...
  6220. * For test purposes, give it
  6221. * a3 = point to screen
  6222. * d0= z distance away
  6223. * and sinval+cosval must be set up.
  6224. ***************************
  6225.  
  6226. BLACKFLOOR:
  6227.  moveq #0,d0
  6228.  bra.s DOBLACK
  6229.  
  6230. SimpleFloorLine:
  6231.  
  6232.  CACHE_OFF d2
  6233.  
  6234.  move.l #doacrossline,a1
  6235.  move.w leftedge(pc),d1
  6236.  move.w rightedge(pc),d3
  6237.  sub.w d1,d3
  6238.  lea (a1,d1.w*4),a1
  6239.  move.w (a1,d3.w*4),d4
  6240.  move.w #$4e75,(a1,d3.w*4)
  6241.  
  6242.  tst.b CLRNOFLOOR
  6243.  bne.s BLACKFLOOR
  6244.  
  6245.  move.l #PLAINSCALE,a2
  6246.  
  6247.  move.w d0,d2
  6248.  move.w lighttype,d1
  6249.  asr.w #8,d2
  6250.  add.w #5,d1
  6251.  add.w d2,d1
  6252.  bge.s .fixedbright
  6253.  moveq #0,d1
  6254. .fixedbright:
  6255.  cmp.w #28,d1
  6256.  ble.s .smallbright
  6257.  move.w #28,d1
  6258. .smallbright:
  6259.  lea (a2,d1.w*2),a2
  6260.  
  6261.  move.w whichtile,d0
  6262.  move.w d0,d1
  6263.  and.w #$3,d1
  6264.  and.w #$300,d0
  6265.  lsl.b #6,d1
  6266.  move.b d1,d0
  6267.  move.w d0,tstwhich
  6268.  move.w (a2,d0.w),d0
  6269.  
  6270. DOBLACK:
  6271.  jsr (a1)
  6272.  move.w d4,(a1,d3.w*4)
  6273.  
  6274.  CACHE_ON d2
  6275.  
  6276.  rts
  6277.  
  6278. tstwhich: dc.w 0
  6279. whichtile: dc.w 0
  6280.   
  6281. PLAINSCALE: incbin "ab3:includes/plainscale"
  6282.   
  6283. storeit: dc.l 0
  6284.  
  6285. doacrossline:
  6286. val SET 0
  6287.  REPT 32
  6288.  move.w d0,val(a3)
  6289. val SET val+4
  6290.  ENDR
  6291. val SET val+4
  6292.  REPT 32
  6293.  move.w d0,val(a3)
  6294. val SET val+4
  6295.  ENDR
  6296. val SET val+4
  6297.  REPT 32
  6298.  move.w d0,val(a3)
  6299. val SET val+4
  6300.  ENDR
  6301.  rts
  6302.  
  6303.  
  6304. leftedge: dc.w 0
  6305. rightedge: dc.w 0
  6306.  
  6307. rndpt: dc.l rndtab
  6308.  
  6309.  
  6310. dst: dc.w 0
  6311.  
  6312. FloorLine:
  6313.  
  6314.  move.l floortile,a0
  6315.  adda.w whichtile,a0
  6316.  move.w lighttype,d1
  6317.  move.w d0,dst
  6318.  move.w d0,d2
  6319. *********************
  6320. * Old version
  6321.  asr.w #8,d2
  6322.  add.w #5,d1
  6323. *********************
  6324. ; asr.w #3,d2
  6325. ; sub.w #4,d2
  6326. ; cmp.w #6,d2
  6327. ; blt.s flbrbr
  6328. ; move.w #6,d2
  6329. ;flbrbr:
  6330. *********************
  6331.  add.w d2,d1
  6332.  bge.s .fixedbright
  6333.  moveq #0,d1
  6334. .fixedbright:
  6335.  cmp.w #28,d1
  6336.  ble.s .smallbright
  6337.  move.w #28,d1
  6338. .smallbright:
  6339.  lea floorscalecols,a1
  6340.  add.l floorbright(pc,d1.w*4),a1
  6341.  bra pastfloorbright
  6342.  
  6343. ConstCol: dc.w 0
  6344.  
  6345. BumpLine:
  6346.  
  6347.  tst.b smoothbumps
  6348.  beq.s Chunky
  6349.  
  6350.  move.l #SmoothTile,a0
  6351.  lea Smoothscalecols,a1
  6352.  bra pastast
  6353.  
  6354. Chunky:
  6355.  
  6356.  moveq #0,d2
  6357.  move.l #Bumptile,a0
  6358.  move.w whichtile,d2
  6359.  adda.w d2,a0
  6360.  ror.l #2,d2
  6361.  lsr.w #6,d2
  6362.  rol.l #2,d2
  6363.  and.w #15,d2
  6364.  move.l #ConstCols,a1
  6365.  move.w (a1,d2.w*2),ConstCol
  6366.  lea Bumpscalecols,a1
  6367.  
  6368. pastast:
  6369.  move.w lighttype,d1
  6370.  
  6371.  move.w d0,dst
  6372.  
  6373.  move.w d0,d2
  6374. *********************
  6375. * Old version
  6376.  asr.w #8,d2
  6377.  add.w #5,d1
  6378. *********************
  6379. ; asr.w #3,d2
  6380. ; sub.w #4,d2
  6381. ; cmp.w #6,d2
  6382. ; blt.s flbrbr
  6383. ; move.w #6,d2
  6384. ;flbrbr:
  6385. *********************
  6386.  add.w d2,d1
  6387.  bge.s .fixedbright
  6388.  moveq #0,d1
  6389. .fixedbright:
  6390.  cmp.w #28,d1
  6391.  ble.s .smallbright
  6392.  move.w #28,d1
  6393. .smallbright:
  6394.  add.l floorbright(pc,d1.w*4),a1
  6395.  bra pastfloorbright
  6396.  
  6397.  
  6398. floorbright:
  6399.  dc.l 512*0
  6400.  dc.l 512*1
  6401.  dc.l 512*1
  6402.  dc.l 512*2
  6403.  dc.l 512*2
  6404.  
  6405.  dc.l 512*3
  6406.  dc.l 512*3
  6407.  dc.l 512*4
  6408.  dc.l 512*4
  6409.  dc.l 512*5
  6410.  
  6411.  dc.l 512*5
  6412.  dc.l 512*6
  6413.  dc.l 512*6
  6414.  dc.l 512*7
  6415.  dc.l 512*7
  6416.  
  6417.  dc.l 512*8
  6418.  dc.l 512*8
  6419.  dc.l 512*9
  6420.  dc.l 512*9
  6421.  dc.l 512*10
  6422.  
  6423.  dc.l 512*10
  6424.  dc.l 512*11
  6425.  dc.l 512*11
  6426.  dc.l 512*12
  6427.  dc.l 512*12
  6428.  
  6429.  dc.l 512*13
  6430.  dc.l 512*13
  6431.  dc.l 512*14
  6432.  dc.l 512*14
  6433.  
  6434. widthleft: dc.w 0
  6435. scaleval: dc.w 0
  6436. sxoff: dc.l 0
  6437. szoff: dc.l 0
  6438. xoff34: dc.w 0
  6439. zoff34: dc.w 0
  6440. scosval: dc.w 0
  6441. ssinval: dc.w 0
  6442.  
  6443.  
  6444. floorsetbright:
  6445.  move.l #walltiles,a0
  6446.  
  6447. pastfloorbright
  6448.  
  6449.  move.w d0,d1
  6450.  muls cosval,d1    ; change in x across whole width
  6451.  move.w d0,d2
  6452.  muls sinval,d2    ; change in z across whole width
  6453.  neg.l d2
  6454. scaleprog:
  6455.  move.w scaleval(pc),d3
  6456.  beq.s .samescale
  6457.  bgt.s .scaledown
  6458.  neg.w d3
  6459.  asr.l d3,d1
  6460.  asr.l d3,d2
  6461.  bra.s .samescale
  6462. .scaledown:
  6463.  asl.l d3,d1
  6464.  asl.l d3,d2
  6465. .samescale
  6466.  
  6467.  move.l d1,d3 ;    z cos
  6468.  move.l d3,d6
  6469.  move.l d3,d5
  6470.  asr.l #1,d6
  6471.  add.l d6,d3
  6472.  asr.l #1,d3
  6473.  
  6474.  move.l d2,d4    ; z sin
  6475.  move.l d4,d6
  6476.  asr.l #1,d6
  6477.  add.l d4,d6
  6478.  add.l d3,d4
  6479.  neg.l d4    ; start x
  6480.  
  6481.  asr.l #1,d6    ; zsin/2
  6482.  sub.l d6,d5    ; start z
  6483.  
  6484.  add.l sxoff,d4
  6485.  add.l szoff,d5
  6486.  
  6487.  moveq #0,d6
  6488.  move.w leftedge(pc),d6
  6489.  beq.s nomultleft
  6490.  
  6491.  move.l d1,a4
  6492.  move.l d2,a5
  6493.  
  6494.  muls.l d6,d3:d1
  6495.  asr.l #6,d1
  6496.  add.l d1,d4
  6497.  
  6498.  muls.l d6,d3:d2
  6499.  asr.l #6,d2
  6500.  add.l d2,d5
  6501.  move.l a4,d1
  6502.  move.l a5,d2
  6503.  
  6504. nomultleft:
  6505.  
  6506.  move.w d4,startsmoothx
  6507.  move.w d5,startsmoothz
  6508.  
  6509.  swap d4
  6510.  asr.l #8,d5
  6511. ; add.w szoff,d5
  6512. ; add.w sxoff,d4
  6513.  and.w #63,d4
  6514.  and.w #63*256,d5
  6515.  move.b d4,d5
  6516.  
  6517.  asr.l #6,d1
  6518.  asr.l #6,d2
  6519.  move.w d1,a4
  6520.  move.w d2,a5
  6521.  asr.l #8,d2
  6522.  and.w #%0011111100000000,d2
  6523.  swap d1
  6524.  add.w d1,d2
  6525.  move.w #%11111100111111,d1
  6526.  and.w d1,d5
  6527.  swap d5
  6528.  move.w startsmoothz,d5
  6529.  swap d5
  6530.  swap d2
  6531.  move.w a5,d2
  6532.  swap d2
  6533.  
  6534. ***********************************
  6535.  
  6536.  move.w d6,a2
  6537.  move.l d2,d6
  6538.  add.w #256,d6
  6539.  
  6540.  moveq #0,d0
  6541.  
  6542.  tst.w a2
  6543.  beq startatleftedge
  6544.  
  6545.  move.w widthleft(pc),d4
  6546.  
  6547.  move.w rightedge(pc),d3
  6548.  
  6549.  cmp.w #31,a2
  6550.  bgt.s notinfirststrip
  6551.  lea (a3,a2.w*4),a3
  6552.  cmp.w #32,d3
  6553.  ble.s allinfirststrip
  6554.  move.w #32,d7
  6555.  sub.w d7,d3
  6556.  sub.w a2,d7
  6557.  bra intofirststrip
  6558.  
  6559. allinfirststrip
  6560.  sub.w a2,d3
  6561.  move.w d3,d7
  6562.  move.w #0,d4
  6563.  bra allintofirst
  6564.  
  6565. notinfirststrip:
  6566.  sub.w #32,a2
  6567.  sub.w #32,d3
  6568.  adda.w #33*4,a3
  6569.  cmp.w #31,a2
  6570.  bgt.s notstartinsec
  6571.  lea (a3,a2.w*4),a3
  6572.  cmp.w #32,d3
  6573.  ble.s allinsecstrip
  6574.  move.w #32,d7
  6575.  sub.w d7,d3
  6576.  sub.w a2,d7
  6577.  move.w d3,d4
  6578.  bra allintofirst
  6579.  
  6580. allinsecstrip
  6581.  sub.w a2,d3
  6582.  move.w d3,d7
  6583.  move.w #0,d4
  6584.  bra allintofirst
  6585.  rts
  6586.  
  6587. prot8: dc.w 0
  6588.  
  6589. notstartinsec:
  6590.  sub.w #32,a2
  6591.  sub.w #32,d3
  6592.  adda.w #33*4,a3
  6593.  lea (a3,a2.w*4),a3
  6594.  cmp.w #32,d3
  6595.  ble.s allinthirdstrip
  6596.  move.w #32,d7
  6597.  sub.w d7,d3
  6598.  sub.w a2,d7
  6599.  move.w d3,d4
  6600.  bra allintofirst
  6601.  rts
  6602.  
  6603. allinthirdstrip
  6604.  sub.w a2,d3
  6605.  move.w d3,d7
  6606.  move.w #0,d4
  6607.  bra allintofirst
  6608.  rts
  6609.  
  6610. startatleftedge:
  6611.  
  6612.  move.w rightedge(pc),d3
  6613.  sub.w a2,d3
  6614.  
  6615.  move.w d3,d7
  6616.  cmp.w #32,d7
  6617.  ble.s .notoowide
  6618.  move.w #32,d7
  6619. .notoowide:
  6620.  sub.w d7,d3
  6621. intofirststrip:
  6622.  
  6623.  move.w d3,d4
  6624. allintofirst:
  6625.  
  6626.  move.w startsmoothx,d3
  6627.  
  6628. tstwat:
  6629.  
  6630.  tst.b gourfloor
  6631.  bne gouraudfloor
  6632.  
  6633.  tst.b usewater
  6634.  bne texturedwater
  6635.  
  6636.  
  6637. ******************************
  6638. * BumpMap the floor/ceiling! *
  6639.  tst.b usebumps
  6640.  bne.s BumpMap
  6641. ******************************
  6642.  
  6643. ordinary:
  6644.  moveq #0,d0
  6645.  
  6646.  dbra d7,acrossscrn
  6647.  rts
  6648.  
  6649. usebumps: dc.w $0
  6650. smoothbumps: dc.w $0
  6651. gourfloor: dc.w 0
  6652.  
  6653.  include "ab3:source/bumpmap.s"
  6654.  
  6655.  CNOP 0,4
  6656. backbefore:
  6657.  and.w d1,d5
  6658.  move.b (a0,d5.w*4),d0
  6659.  add.w a4,d3
  6660.  move.w (a1,d0.w*2),(a3)
  6661.  addq #4,a3
  6662.  addx.l d6,d5
  6663.  dbcs d7,acrossscrn
  6664.  dbcc d7,backbefore
  6665.  bra.s past1
  6666.  
  6667. acrossscrn:
  6668.  and.w d1,d5
  6669.  move.b (a0,d5.w*4),d0
  6670.  add.w a4,d3
  6671.  move.w (a1,d0.w*2),(a3)
  6672.  addq #4,a3
  6673.  addx.l d2,d5
  6674.  dbcs d7,acrossscrn
  6675.  dbcc d7,backbefore
  6676. past1:
  6677.  bcc.s gotoacross
  6678.  
  6679.  move.w d4,d7
  6680.  bne.s .notdoneyet
  6681.  CACHE_FREEZE_ON d2
  6682.  rts
  6683. .notdoneyet:
  6684.  
  6685.  cmp.w #32,d7
  6686.  ble.s .notoowide
  6687.  move.w #32,d7
  6688. .notoowide
  6689.  sub.w d7,d4  
  6690.  addq #4,a3
  6691.  
  6692.  dbra d7,backbefore
  6693.  CACHE_FREEZE_ON d2
  6694.  rts
  6695.  
  6696.  
  6697. gotoacross:
  6698.  
  6699.  move.w d4,d7
  6700.  bne.s .notdoneyet
  6701.  CACHE_FREEZE_ON d2
  6702.  rts
  6703. .notdoneyet:
  6704.  
  6705.  cmp.w #32,d7
  6706.  ble.s .notoowide
  6707.  move.w #32,d7
  6708. .notoowide
  6709.  sub.w d7,d4  
  6710.  addq #4,a3
  6711.  
  6712.  dbra d7,acrossscrn
  6713.  CACHE_FREEZE_ON d2
  6714.  rts
  6715.  
  6716. leftbright: dc.l 0
  6717. brightspd: dc.l 0
  6718.  
  6719. gouraudfloor:
  6720.  move.l leftbright,d0
  6721.  move.l brightspd,d1
  6722.  dbra d7,acrossscrngour
  6723.  rts
  6724.  
  6725.  CNOP 0,4
  6726. backbeforegour:
  6727.  and.w #63*256+63,d5
  6728.  move.b (a0,d5.w*4),d0
  6729.  add.l d1,d0
  6730.  bcc.s .nomoreb
  6731.  add.w #256,d0
  6732. .nomoreb:
  6733.  add.w a4,d3
  6734.  move.w (a1,d0.w*2),(a3)
  6735.  addq #4,a3 
  6736.  addx.l d6,d5
  6737.  dbcs d7,acrossscrngour
  6738.  dbcc d7,backbeforegour
  6739.  bra.s past1gour
  6740.  
  6741. acrossscrngour:
  6742.  and.w #63*256+63,d5
  6743.  move.b (a0,d5.w*4),d0
  6744.  add.l d1,d0
  6745.  bcc.s .nomoreb
  6746.  add.w #256,d0
  6747. .nomoreb:
  6748.  add.w a4,d3
  6749.  move.w (a1,d0.w*2),(a3)
  6750.  addq #4,a3
  6751.  addx.l d2,d5
  6752.  dbcs d7,acrossscrngour
  6753.  dbcc d7,backbeforegour
  6754. past1gour:
  6755.  bcc.s gotoacrossgour
  6756.  
  6757.  move.w d4,d7
  6758.  bne.s .notdoneyet
  6759.  move.l d0,leftbright
  6760.  
  6761.  CACHE_FREEZE_ON d2
  6762.  rts
  6763. .notdoneyet:
  6764.  
  6765.  cmp.w #32,d7
  6766.  ble.s .notoowide
  6767.  move.w #32,d7
  6768. .notoowide
  6769.  sub.w d7,d4  
  6770.  addq #4,a3
  6771.  
  6772.  dbra d7,backbeforegour
  6773.  CACHE_FREEZE_ON d2
  6774.  rts
  6775.  
  6776.  
  6777. gotoacrossgour:
  6778.  
  6779.  move.w d4,d7
  6780.  bne.s .notdoneyet
  6781.  CACHE_FREEZE_ON d2
  6782.  rts
  6783. .notdoneyet:
  6784.  
  6785.  cmp.w #32,d7
  6786.  ble.s .notoowide
  6787.  move.w #32,d7
  6788. .notoowide
  6789.  sub.w d7,d4  
  6790.  addq #4,a3
  6791.  
  6792.  dbra d7,acrossscrngour
  6793.  CACHE_FREEZE_ON d2
  6794.  rts
  6795.  
  6796.  
  6797. waterpt: dc.l waterlist
  6798.  
  6799. waterlist:
  6800.  dc.l waterfile
  6801.  dc.l waterfile+2
  6802.  dc.l waterfile+256
  6803.  dc.l waterfile+256+2
  6804.  dc.l waterfile+512
  6805.  dc.l waterfile+512+2
  6806.  dc.l waterfile+768
  6807.  dc.l waterfile+768+2
  6808. ; dc.l waterfile+768
  6809. ; dc.l waterfile+512+2
  6810. ; dc.l waterfile+512
  6811. ; dc.l waterfile+256+2
  6812. ; dc.l waterfile+256
  6813. ; dc.l waterfile+2
  6814. endwaterlist:
  6815.  
  6816. watertouse: dc.l waterfile
  6817.  
  6818. wtan: dc.w 0
  6819. wateroff: dc.w 0
  6820.  
  6821. texturedwater:
  6822.  
  6823.  add.w wateroff,d5
  6824.  
  6825.  move.l #brightentab,a1
  6826.  move.w dst,d0
  6827.  clr.b d0
  6828.  
  6829.  add.w d0,d0
  6830.  cmp.w #12*512,d0
  6831.  blt.s .notoowater
  6832.  move.w #12*512,d0
  6833.  
  6834.  
  6835. .notoowater:
  6836.   
  6837.  adda.w d0,a1
  6838.  
  6839.  move.w dst,d0
  6840.  asl.w #7,d0
  6841.  add.w wtan,d0
  6842.  and.w #8191,d0
  6843.  move.l #SineTable,a0
  6844.  move.w (a0,d0.w),d0
  6845.  ext.l d0
  6846.  
  6847.  move.w dst,d3
  6848.  add.w #300,d3
  6849.  divs d3,d0
  6850.  asr.w #6,d0
  6851.  addq #2,d0
  6852.  cmp.w disttobot,d0
  6853.  blt.s oknotoffbototot
  6854.  
  6855.  move.w disttobot,d0
  6856.  subq #1,d0
  6857.  
  6858. oknotoffbototot
  6859.  
  6860. ; move.w dst,d3
  6861. ; asr.w #7,d3
  6862. ; add.w d3,d0
  6863.  
  6864.  muls #104*4,d0
  6865.  tst.w above
  6866.  beq.s nonnnnneg
  6867.  neg.l d0
  6868.  
  6869. nonnnnneg:
  6870.  
  6871.  move.l d0,a6
  6872.  
  6873.  move.l watertouse,a0
  6874.  
  6875.  move.w startsmoothx,d3
  6876.  dbra d7,acrossscrnw
  6877.  rts
  6878.  
  6879. backbeforew:
  6880.  and.w d1,d5
  6881.  move.w (a0,d5.w*4),d0
  6882.  move.b 1(a3,a6.w),d0
  6883.  move.w (a1,d0.w*2),(a3)
  6884.  addq #4,a3
  6885.  add.w a4,d3
  6886.  addx.l d6,d5
  6887.  dbcs d7,acrossscrnw
  6888.  dbcc d7,backbeforew
  6889.  bcc.s past1w
  6890.  add.w #256,d5 
  6891.  bra.s past1w
  6892.  
  6893. acrossscrnw:
  6894.  and.w d1,d5
  6895.  move.w (a0,d5.w*4),d0
  6896.  move.b 1(a3,a6.w),d0
  6897.  move.w (a1,d0.w*2),(a3)
  6898.  addq #4,a3
  6899.  add.w a4,d3
  6900.  addx.l d2,d5
  6901.  dbcs d7,acrossscrnw
  6902.  dbcc d7,backbeforew
  6903.  bcc.s past1w
  6904.  add.w #256,d5 
  6905. past1w:
  6906.  
  6907.  move.w d4,d7
  6908.  bne.s .notdoneyet
  6909.  rts
  6910. .notdoneyet:
  6911.  
  6912.  cmp.w #32,d7
  6913.  ble.s .notoowide
  6914.  move.w #32,d7
  6915. .notoowide
  6916.  sub.w d7,d4  
  6917.  addq #4,a3
  6918.  
  6919.  dbra d7,acrossscrnw
  6920.  CACHE_FREEZE_ON d2
  6921.  rts
  6922.  
  6923. usewater: dc.w 0
  6924.  dc.w 0
  6925. startsmoothx: dc.w 0
  6926.  dc.w 0
  6927. startsmoothz: dc.w 0
  6928.  
  6929. ********************************
  6930. *
  6931.  include "AB3:source/ObjDraw3.chipram"
  6932. *
  6933. ********************************
  6934.  
  6935. numframes:
  6936.  dc.w 0
  6937.  
  6938. alframe: dc.l 0
  6939.  
  6940. alan:
  6941.  dcb.l 8,0
  6942.  dcb.l 8,1
  6943.  dcb.l 8,2
  6944.  dcb.l 8,3
  6945. endalan:
  6946.  
  6947. alanptr: dc.l alan
  6948.  
  6949. Time2: dc.l 0
  6950. dispco:
  6951.  dc.w 0
  6952.  
  6953. KInt_Init    ;VBR Assumed $0
  6954.         move.l $68.w,OLDKINT
  6955.         Move.l    #KInt_Main,$68.w    Install Interrupt 
  6956.         And.b    #$3f,$bfe201        Set Timers
  6957.         Move.b    #$7f,$bfed01
  6958.         Move.b    $bfed01,d0
  6959.         Move.b    #$88,$bfed01
  6960.         St.b    KInt_CCode        
  6961.         Move.b    #$a0,$bfee01        Start Timey Thing
  6962.         Rts                And return
  6963.  
  6964. OLDKINT: dc.l 0
  6965.  
  6966.  
  6967. KInt_Main    
  6968.         Movem.l    d0/d1/a0/a1/a6,-(a7)    Stack everything
  6969.         Move.w    #8,$dff09a        Temp Disable Int.
  6970.         Move.w    $dff01e,d0        Intreqr
  6971.         And.w    #8,d0            Mask Out All X^ K_Int
  6972.     Beq    KInt_End            Not Keyboard Interrupt
  6973.         Lea    $bfed01,a6
  6974.         Move.w    #$8,$dff09c        Clear Int.Request
  6975.         Move.b    -$100(a6),d0        Move Raw Keyboard value
  6976.         Ror.b    #1,d0            Roll to correct
  6977.         Not.b    d0            
  6978.         Move.b    d0,KInt_CCode        Save Corrected Keycode
  6979. .HandShake    Move.b    #8,(a6)
  6980.         Move.b    #7,-$900(a6)
  6981.         Move.b    #0,-$800(a6)
  6982.         Move.b    #0,-$100(a6)
  6983.         Move.b    #$d1,$100(a6)        
  6984.         Tst.b    (a6)    
  6985. .wait        Btst    #0,(a6)
  6986.     Beq.s    .wait
  6987.         Move.b    #$a0,$100(a6)        
  6988.         Move.b    (a6),d0        
  6989.         Move.b    #$88,(a6)
  6990.         Lea    KeyMap,a1
  6991.         Moveq.w    #0,d0
  6992.         Move.b    KInt_CCode(pc),d0
  6993.     Bmi.s    KInt_KeyUp            neg if up 
  6994.  
  6995. KInt_KeyDown
  6996.         st (a1,d0.w)
  6997.         move.b d0,lastpressed
  6998.     Bra    KInt_End
  6999.  
  7000. KInt_KeyUp
  7001.         And.w    #$7f,d0            Make code Positive
  7002.         clr.b (a1,d0.w)
  7003. KInt_End    Movem.l    (a7)+,d0/d1/a0/a1/a6    Unstack Everything
  7004.     
  7005.         Move.w    #$8008,$dff09a        Re-enable Int.
  7006.         Rte
  7007.  
  7008. lastpressed:    dc.b 0
  7009. KInt_CCode    Ds.b    1
  7010. KInt_Askey    Ds.b    1
  7011. KInt_OCode    Ds.w    1
  7012.  
  7013.  
  7014. OldSpace: dc.b 0
  7015. SpaceTapped: dc.b 0
  7016. PLR1_SPCTAP: dc.b 0
  7017. PLR2_SPCTAP: dc.b 0
  7018. PLR1_Ducked: dc.b 0
  7019. PLR2_Ducked: dc.b 0
  7020.  even
  7021.  
  7022.  include "ab3:source/PLR1CONTROL.s"
  7023.  include "ab3:source/PLR2CONTROL.s"
  7024.  include "ab3:source/FALL.s"
  7025.  
  7026. prot7: dc.w 0
  7027.  
  7028. GOTTOSEND: dc.w 0
  7029.  
  7030. OtherInter:
  7031.  move.w #$0010,$dff000+intreq
  7032.  movem.l d0-d7/a0-a6,-(a7)
  7033.  bra.s justshake
  7034.  
  7035. Chan0inter:
  7036.  
  7037.  move.w #$0010,$dff000+intreq
  7038.  
  7039.  tst.b doanything
  7040.  bne.s dosomething
  7041.  rte
  7042.  
  7043. dosomething:
  7044.  
  7045.  
  7046.  addq.w #1,FramesToDraw
  7047.  movem.l d0-d7/a0-a6,-(a7)
  7048.  
  7049. ; jsr INITREC
  7050. ; jsr RECEIVE
  7051.  
  7052. ; tst.l BUFFER
  7053. ; beq.s justshake
  7054. ; st GOTTOSEND
  7055. ; move.l #OtherInter,$6c
  7056.  
  7057. justshake:
  7058.  
  7059.  cmp.b #'b',Prefsfile+3
  7060.  bne.s .noback
  7061.  jsr mt_music
  7062. .noback:
  7063.  
  7064.  bra dontshowtime
  7065.  
  7066.  tst.b oktodisplay
  7067.  beq dontshowtime
  7068.  clr.b oktodisplay
  7069.  subq.w #1,dispco
  7070.  bgt dontshowtime
  7071.  move.w #10,dispco
  7072.  
  7073.  move.l #TimerScr+10,a0
  7074.  move.l TimeCount,d0
  7075.  bge.s timenotneg
  7076.  move.l #1111*256,d0
  7077. timenotneg:
  7078.  asr.l #8,d0
  7079.  move.l #digits,a1
  7080.  move.w #7,d2
  7081. digitlop
  7082.  divs #10,d0
  7083.  swap d0
  7084.  lea (a1,d0.w*8),a2
  7085.  move.b (a2)+,(a0)
  7086.  move.b (a2)+,24(a0)
  7087.  move.b (a2)+,24*2(a0)
  7088.  move.b (a2)+,24*3(a0)
  7089.  move.b (a2)+,24*4(a0)
  7090.  move.b (a2)+,24*5(a0)
  7091.  move.b (a2)+,24*6(a0)
  7092.  move.b (a2)+,24*7(a0)
  7093.  subq #1,a0
  7094.  swap d0
  7095.  ext.l d0
  7096.  dbra d2,digitlop
  7097.  
  7098.  move.l #TimerScr+10+24*10,a0
  7099.  move.l NumTimes,d0
  7100.  move.l #digits,a1
  7101.  move.w #3,d2
  7102. digitlop2
  7103.  divs #10,d0
  7104.  swap d0
  7105.  lea (a1,d0.w*8),a2
  7106.  move.b (a2)+,(a0)
  7107.  move.b (a2)+,24(a0)
  7108.  move.b (a2)+,24*2(a0)
  7109.  move.b (a2)+,24*3(a0)
  7110.  move.b (a2)+,24*4(a0)
  7111.  move.b (a2)+,24*5(a0)
  7112.  move.b (a2)+,24*6(a0)
  7113.  move.b (a2)+,24*7(a0)
  7114.  subq #1,a0
  7115.  swap d0
  7116.  ext.l d0
  7117.  dbra d2,digitlop2
  7118.  
  7119.  move.l #TimerScr+10+24*20,a0
  7120.  moveq #0,d0
  7121.  move.w FramesToDraw,d0
  7122.  move.l #digits,a1
  7123.  move.w #2,d2
  7124. digitlop3
  7125.  divs #10,d0
  7126.  swap d0
  7127.  lea (a1,d0.w*8),a2
  7128.  move.b (a2)+,(a0)
  7129.  move.b (a2)+,24(a0)
  7130.  move.b (a2)+,24*2(a0)
  7131.  move.b (a2)+,24*3(a0)
  7132.  move.b (a2)+,24*4(a0)
  7133.  move.b (a2)+,24*5(a0)
  7134.  move.b (a2)+,24*6(a0)
  7135.  move.b (a2)+,24*7(a0)
  7136.  subq #1,a0
  7137.  swap d0
  7138.  ext.l d0
  7139.  dbra d2,digitlop3
  7140.  
  7141. dontshowtime:
  7142.  
  7143.  
  7144.  move.l alanptr,a0
  7145.  move.l (a0)+,alframe
  7146.  cmp.l #endalan,a0
  7147.  blt.s nostartalan
  7148.  move.l #alan,a0
  7149. nostartalan:
  7150.  move.l a0,alanptr
  7151.  
  7152.  
  7153.  tst.b READCONTROLS
  7154.  beq.s nocontrols
  7155.  
  7156.  cmp.b #'s',mors
  7157.  beq.s control2
  7158.  
  7159.  tst.b PLR1MOUSE
  7160.  beq.s PLR1_nomouse
  7161.  bsr PLR1_mouse_control
  7162. PLR1_nomouse:
  7163.  tst.b PLR1KEYS
  7164.  beq.s PLR1_nokeys
  7165.  bsr PLR1_keyboard_control
  7166. PLR1_nokeys:
  7167. ; tst.b PLR1PATH
  7168. ; beq.s PLR1_nopath
  7169. ; bsr PLR1_follow_path
  7170. ;PLR1_nopath:
  7171.  tst.b PLR1JOY
  7172.  beq.s PLR1_nojoy
  7173.  bsr PLR1_JoyStick_control
  7174. PLR1_nojoy: 
  7175.  bra.s nocontrols
  7176.  
  7177. control2:
  7178.  tst.b PLR2MOUSE
  7179.  beq.s PLR2_nomouse
  7180.  bsr PLR2_mouse_control
  7181. PLR2_nomouse:
  7182.  tst.b PLR2KEYS
  7183.  beq.s PLR2_nokeys
  7184.  bsr PLR2_keyboard_control
  7185. PLR2_nokeys:
  7186. ; tst.b PLR2PATH
  7187. ; beq.s PLR2_nopath
  7188. ; bsr PLR1_follow_path
  7189. ;PLR2_nopath:
  7190.  tst.b PLR2JOY
  7191.  beq.s PLR2_nojoy
  7192.  bsr PLR2_JoyStick_control
  7193. PLR2_nojoy: 
  7194.  
  7195.  
  7196. nocontrols:
  7197.  
  7198.  move.l #$dff000,a6
  7199.  
  7200.  cmp.b #'4',Prefsfile+1
  7201.  bne.s nomuckabout
  7202.  
  7203.  move.w #$0,d0 
  7204.  tst.b NoiseMade0LEFT
  7205.  beq.s noturnoff0
  7206.  move.w #1,d0
  7207. noturnoff0:
  7208.  tst.b NoiseMade0RIGHT
  7209.  beq.s noturnoff1
  7210.  or.w #2,d0
  7211. noturnoff1:
  7212.  tst.b NoiseMade1RIGHT
  7213.  beq.s noturnoff2
  7214.  or.w #4,d0
  7215. noturnoff2:
  7216.  tst.b NoiseMade1LEFT
  7217.  beq.s noturnoff3
  7218.  or.w #8,d0
  7219. noturnoff3:
  7220.  move.w d0,dmacon(a6)
  7221.  
  7222. nomuckabout:
  7223.  
  7224.  
  7225. ; tst.b PLR2_fire
  7226. ; beq.s firenotpressed2
  7227. ; fire was pressed last time.
  7228. ; btst #7,$bfe001
  7229. ; bne.s firenownotpressed2
  7230. ; fire is still pressed this time.
  7231. ; st PLR2_fire
  7232. ; bra dointer
  7233.  
  7234. firenownotpressed2:
  7235. ; fire has been released.
  7236. ; clr.b PLR2_fire
  7237. ; bra dointer
  7238.  
  7239. firenotpressed2
  7240.  
  7241. ; fire was not pressed last frame...
  7242.  
  7243. ; btst #7,$bfe001
  7244. ; if it has still not been pressed, go back above
  7245. ; bne.s firenownotpressed2
  7246. ; fire was not pressed last time, and was this time, so has
  7247. ; been clicked.
  7248. ; st PLR2_clicked
  7249. ; st PLR2_fire
  7250.  
  7251. dointer
  7252.  
  7253.  cmp.b #'4',Prefsfile+1
  7254.  beq fourchannel
  7255.  
  7256.  btst #1,$dff000+intreqr
  7257.  bne.s newsampbitl
  7258.  
  7259.  movem.l (a7)+,d0-d7/a0-a6
  7260.  
  7261.  rte
  7262.  
  7263.  
  7264. swappedem: dc.w 0
  7265.  
  7266. newsampbitl:
  7267.  
  7268.  move.w #$820f,$dff000+dmacon
  7269.  
  7270.  move.w #$200,$dff000+intreq
  7271.  
  7272. ; tst.b CHANNELDATA
  7273. ; bne nochannel0
  7274.  
  7275.  move.l pos0LEFT,a0
  7276.  move.l pos2LEFT,a1
  7277.  
  7278.  move.l #tab,a2
  7279.  
  7280.  moveq #0,d0
  7281.  moveq #0,d1
  7282.  move.b vol0left,d0
  7283.  move.b vol2left,d1
  7284.  cmp.b d1,d0
  7285.  slt swappedem
  7286.  bge.s fbig0
  7287.  
  7288. ; d1 is bigger so scale d0 and use d1
  7289. ; as audiochannel volume.
  7290.  
  7291.  exg a0,a1
  7292.  asl.w #6,d0
  7293.  divs d1,d0
  7294.  lsl.w #8,d0
  7295.  adda.w d0,a2
  7296.  move.w d1,$dff0a8
  7297.  bra.s donechan0
  7298.  
  7299. fbig0:
  7300.  tst.w d0
  7301.  beq.s donechan0
  7302.  asl.w #6,d1
  7303.  divs d0,d1
  7304.  lsl.w #8,d1
  7305.  adda.w d1,a2
  7306.  move.w d0,$dff0a8
  7307.  
  7308. donechan0:
  7309.  
  7310.  move.l Aupt0,a3
  7311.  move.l a3,$dff0a0
  7312.  move.l Auback0,Aupt0
  7313.  move.l a3,Auback0
  7314.  
  7315.  move.l Auback0,a3
  7316.  
  7317.  moveq #0,d0
  7318.  moveq #0,d1
  7319.  moveq #0,d2
  7320.  moveq #0,d3
  7321.  moveq #0,d4
  7322.  moveq #0,d5
  7323.  move.w #49,d7
  7324. loop:
  7325.  move.l (a0)+,d0
  7326.  move.b (a1)+,d1
  7327.  move.b (a1)+,d2
  7328.  move.b (a1)+,d3
  7329.  move.b (a1)+,d4
  7330.  move.b (a2,d3.w),d5
  7331.  swap d5
  7332.  move.b (a2,d1.w),d5
  7333.  asl.l #8,d5
  7334.  move.b (a2,d2.w),d5
  7335.  swap d5
  7336.  move.b (a2,d4.w),d5
  7337.  add.l d5,d0
  7338.  move.l d0,(a3)+
  7339.  dbra d7,loop
  7340.  
  7341.  tst.b swappedem
  7342.  beq.s .ok23
  7343.  exg a0,a1
  7344. .ok23:
  7345.  
  7346.  cmp.l Samp0endLEFT,a0
  7347.  blt.s .notoffendsamp1
  7348.  move.l SampleList+6*8,a0
  7349.  move.l SampleList+6*8+4,Samp0endLEFT
  7350.  move.b #63,vol0left
  7351.  st LEFTCHANDATA+1
  7352.  move.w #0,LEFTCHANDATA+2
  7353. .notoffendsamp1:
  7354.  
  7355.  cmp.l Samp2endLEFT,a1
  7356.  blt.s .notoffendsamp2
  7357.  move.l #empty,a1
  7358.  move.l #emptyend,Samp2endLEFT
  7359.  move.b #0,vol2left
  7360.  st LEFTCHANDATA+1+8
  7361.  move.w #0,LEFTCHANDATA+2+8
  7362. .notoffendsamp2:
  7363.  
  7364.  move.l a0,pos0LEFT
  7365.  move.l a1,pos2LEFT
  7366.  
  7367. nochannel0:
  7368.  
  7369.  tst.b CHANNELDATA+16
  7370.  bne nochannel1
  7371.  
  7372.  
  7373.  move.l pos0RIGHT,a0
  7374.  move.l pos2RIGHT,a1
  7375.  
  7376.  move.l Aupt1,a3
  7377.  move.l a3,$dff0b0
  7378.  move.l Auback1,Aupt1
  7379.  move.l a3,Auback1
  7380.  
  7381.  move.l #tab,a2
  7382.  
  7383.  moveq #0,d0
  7384.  moveq #0,d1
  7385.  move.b vol0right,d0
  7386.  move.b vol2right,d1
  7387.  cmp.b d1,d0
  7388.  slt swappedem
  7389.  bge.s fbig1
  7390.  
  7391. ; d1 is bigger so scale d0 and use d1
  7392. ; as audiochannel volume.
  7393.  
  7394.  exg a0,a1
  7395.  asl.w #6,d0
  7396.  divs d1,d0
  7397.  lsl.w #8,d0
  7398.  adda.w d0,a2
  7399.  move.w d1,$dff0b8
  7400.  bra.s donechan1
  7401.  
  7402. fbig1:
  7403.  tst.w d0
  7404.  beq.s donechan1
  7405.  asl.w #6,d1
  7406.  divs d0,d1
  7407.  lsl.w #8,d1
  7408.  adda.w d1,a2
  7409.  move.w d0,$dff0b8
  7410.  
  7411. donechan1:
  7412.  moveq #0,d0
  7413.  moveq #0,d1
  7414.  moveq #0,d2
  7415.  moveq #0,d3
  7416.  moveq #0,d4
  7417.  moveq #0,d5
  7418.  move.w #49,d7
  7419. loop2:
  7420.  move.l (a0)+,d0
  7421.  move.b (a1)+,d1
  7422.  move.b (a1)+,d2
  7423.  move.b (a1)+,d3
  7424.  move.b (a1)+,d4
  7425.  move.b (a2,d3.w),d5
  7426.  swap d5
  7427.  move.b (a2,d1.w),d5
  7428.  asl.l #8,d5
  7429.  move.b (a2,d2.w),d5
  7430.  swap d5
  7431.  move.b (a2,d4.w),d5
  7432.  add.l d5,d0
  7433.  move.l d0,(a3)+
  7434.  dbra d7,loop2
  7435.  
  7436.  tst.b swappedem
  7437.  beq.s ok01
  7438.  exg a0,a1
  7439. ok01:
  7440.  
  7441.  cmp.l Samp0endRIGHT,a0
  7442.  blt.s .notoffendsamp1
  7443.  move.l #empty,a0
  7444.  move.l #emptyend,Samp0endRIGHT
  7445.  move.b #0,vol0right
  7446.  st RIGHTCHANDATA+1
  7447.  move.w #0,RIGHTCHANDATA+2
  7448. .notoffendsamp1:
  7449.  
  7450.  cmp.l Samp2endRIGHT,a1
  7451.  blt.s .notoffendsamp2
  7452.  move.l #empty,a1
  7453.  move.l #emptyend,Samp2endRIGHT
  7454.  move.b #0,vol2right
  7455.  st RIGHTCHANDATA+1+8
  7456.  move.w #0,RIGHTCHANDATA+2+8
  7457. .notoffendsamp2:
  7458.  
  7459.  move.l a0,pos0RIGHT
  7460.  move.l a1,pos2RIGHT
  7461.  
  7462. nochannel1:
  7463.  
  7464. ******************* Other two channels
  7465.  
  7466.  move.l pos1LEFT,a0
  7467.  move.l pos3LEFT,a1
  7468.  
  7469.  move.l #tab,a2
  7470.  
  7471.  moveq #0,d0
  7472.  moveq #0,d1
  7473.  move.b vol1left,d0
  7474.  move.b vol3left,d1
  7475.  cmp.b d1,d0
  7476.  slt swappedem
  7477.  bge.s fbig2
  7478.  
  7479. ; d1 is bigger so scale d0 and use d1
  7480. ; as audiochannel volume.
  7481.  
  7482.  exg a0,a1
  7483.  asl.w #6,d0
  7484.  divs d1,d0
  7485.  lsl.w #8,d0
  7486.  adda.w d0,a2
  7487.  move.w d1,$dff0d8
  7488.  bra.s donechan2
  7489.  
  7490. fbig2:
  7491.  tst.w d0
  7492.  beq.s donechan2
  7493.  asl.w #6,d1
  7494.  divs d0,d1
  7495.  lsl.w #8,d1
  7496.  adda.w d1,a2
  7497.  move.w d0,$dff0d8
  7498.  
  7499. donechan2:
  7500.  
  7501.  move.l Aupt2,a3
  7502.  move.l a3,$dff0d0
  7503.  move.l Auback2,Aupt2
  7504.  move.l a3,Auback2
  7505.  
  7506.  moveq #0,d0
  7507.  moveq #0,d1
  7508.  moveq #0,d2
  7509.  moveq #0,d3
  7510.  moveq #0,d4
  7511.  moveq #0,d5
  7512.  move.w #49,d7
  7513. loop3:
  7514.  move.l (a0)+,d0
  7515.  move.b (a1)+,d1
  7516.  move.b (a1)+,d2
  7517.  move.b (a1)+,d3
  7518.  move.b (a1)+,d4
  7519.  move.b (a2,d3.w),d5
  7520.  swap d5
  7521.  move.b (a2,d1.w),d5
  7522.  asl.l #8,d5
  7523.  move.b (a2,d2.w),d5
  7524.  swap d5
  7525.  move.b (a2,d4.w),d5
  7526.  add.l d5,d0
  7527.  move.l d0,(a3)+
  7528.  dbra d7,loop3
  7529.  
  7530.  tst.b swappedem
  7531.  beq.s .ok23
  7532.  exg a0,a1
  7533. .ok23:
  7534.  
  7535.  cmp.l Samp1endLEFT,a0
  7536.  blt.s .notoffendsamp3
  7537.  move.l #empty,a0
  7538.  move.l #emptyend,Samp1endLEFT
  7539.  move.b #0,vol1left
  7540.  st LEFTCHANDATA+1+4
  7541.  move.w #0,LEFTCHANDATA+2+4
  7542. .notoffendsamp3:
  7543.  
  7544.  cmp.l Samp3endLEFT,a1
  7545.  blt.s .notoffendsamp4
  7546.  move.l #empty,a1
  7547.  move.l #emptyend,Samp3endLEFT
  7548.  move.b #0,vol3left
  7549.  st LEFTCHANDATA+1+12
  7550.  move.w #0,LEFTCHANDATA+2+12
  7551. .notoffendsamp4:
  7552.  
  7553.  move.l a0,pos1LEFT
  7554.  move.l a1,pos3LEFT
  7555.  
  7556.  move.l pos1RIGHT,a0
  7557.  move.l pos3RIGHT,a1
  7558.  
  7559.  move.l Aupt3,a3
  7560.  move.l a3,$dff0c0
  7561.  move.l Auback3,Aupt3
  7562.  move.l a3,Auback3
  7563.  
  7564.  move.l #tab,a2
  7565.  
  7566.  moveq #0,d0
  7567.  moveq #0,d1
  7568.  move.b vol1right,d0
  7569.  move.b vol3right,d1
  7570.  cmp.b d1,d0
  7571.  slt.s swappedem
  7572.  bge.s fbig3
  7573.  
  7574.  exg a0,a1
  7575.  asl.w #6,d0
  7576.  divs d1,d0
  7577.  lsl.w #8,d0
  7578.  adda.w d0,a2
  7579.  move.w d1,$dff0c8
  7580.  bra.s donechan3
  7581.  
  7582. fbig3:
  7583.  tst.w d0
  7584.  beq.s donechan3
  7585.  asl.w #6,d1
  7586.  divs d0,d1
  7587.  lsl.w #8,d1
  7588.  adda.w d1,a2
  7589.  move.w d0,$dff0c8
  7590. donechan3:
  7591.  
  7592.  moveq #0,d0
  7593.  moveq #0,d1
  7594.  moveq #0,d2
  7595.  moveq #0,d3
  7596.  moveq #0,d4
  7597.  moveq #0,d5
  7598.  move.w #49,d7
  7599. loop4:
  7600.  move.l (a0)+,d0
  7601.  move.b (a1)+,d1
  7602.  move.b (a1)+,d2
  7603.  move.b (a1)+,d3
  7604.  move.b (a1)+,d4
  7605.  move.b (a2,d3.w),d5
  7606.  swap d5
  7607.  move.b (a2,d1.w),d5
  7608.  asl.l #8,d5
  7609.  move.b (a2,d2.w),d5
  7610.  swap d5
  7611.  move.b (a2,d4.w),d5
  7612.  add.l d5,d0
  7613.  move.l d0,(a3)+
  7614.  dbra d7,loop4
  7615.  
  7616.  tst.b swappedem
  7617.  beq.s .ok23
  7618.  exg a0,a1
  7619. .ok23:
  7620.  
  7621.  cmp.l Samp1endRIGHT,a0
  7622.  blt.s notoffendsamp3
  7623.  move.l #empty,a0
  7624.  move.l #emptyend,Samp1endRIGHT
  7625.  move.b #0,vol1right
  7626.  st RIGHTCHANDATA+1+4
  7627.  move.w #0,RIGHTCHANDATA+2+4
  7628. notoffendsamp3:
  7629.  
  7630.  cmp.l Samp3endRIGHT,a1
  7631.  blt.s notoffendsamp4
  7632.  move.l #empty,a1
  7633.  move.l #emptyend,Samp3endRIGHT
  7634.  move.b #0,vol3right
  7635.  st RIGHTCHANDATA+1+12
  7636.  move.w #0,RIGHTCHANDATA+2+12
  7637. notoffendsamp4:
  7638.  
  7639.  move.l a0,pos1RIGHT
  7640.  move.l a1,pos3RIGHT
  7641.  
  7642.  movem.l (a7)+,d0-d7/a0-a6
  7643.  tst.b counting
  7644.  beq .nostartcounter
  7645.  JSR STARTCOUNT
  7646. .nostartcounter:
  7647.  
  7648.  rte
  7649.  
  7650. ***********************************
  7651. * 4 channel sound routine
  7652. ***********************************
  7653.  
  7654. fourchannel:
  7655.  
  7656.  move.l #$dff000,a6
  7657.  
  7658.  btst #7,intreqrl(a6)
  7659.  beq.s nofinish0
  7660. ; move.w #0,LEFTCHANDATA+2
  7661. ; st LEFTCHANDATA+1
  7662.  move.l #null,$a0(a6)
  7663.  move.w #100,$a4(a6) 
  7664.  move.w #$0080,intreq(a6)
  7665. nofinish0:
  7666.  
  7667.  tst.b NoiseMade0pLEFT
  7668.  beq.s NoChan0sound
  7669.  
  7670.  move.l Samp0endLEFT,d0
  7671.  move.l pos0LEFT,d1
  7672.  sub.l d1,d0
  7673.  lsr.l #1,d0
  7674.  move.w d0,$a4(a6)
  7675.  move.l d1,$a0(a6)
  7676.  move.w #$8201,dmacon(a6)
  7677.  moveq #0,d0
  7678.  move.b vol0left,d0
  7679.  move.w d0,$a8(a6)
  7680.  
  7681. NoChan0sound:
  7682.  
  7683. *****************************************
  7684. *****************************************
  7685.  
  7686.  btst #0,intreqr(a6)
  7687.  beq.s nofinish1
  7688.  move.l #null,$b0(a6)
  7689.  move.w #100,$b4(a6)
  7690.  move.w #$0100,intreq(a6)
  7691. nofinish1:
  7692.  
  7693.  tst.b NoiseMade0pRIGHT
  7694.  beq.s NoChan1sound
  7695.  
  7696.  move.l Samp0endRIGHT,d0
  7697.  move.l pos0RIGHT,d1
  7698.  sub.l d1,d0
  7699.  lsr.l #1,d0
  7700.  move.w d0,$b4(a6)
  7701.  move.l d1,$b0(a6)
  7702.  move.w d0,playnull1
  7703.  move.w #$8202,dmacon(a6)
  7704.  moveq #0,d0
  7705.  move.b vol0right,d0
  7706.  move.w d0,$b8(a6)
  7707.  
  7708. NoChan1sound:
  7709.  
  7710. *****************************************
  7711. *****************************************
  7712.  
  7713.  btst #1,intreqr(a6)
  7714.  beq.s nofinish2
  7715.  move.l #null,$c0(a6)
  7716.  move.w #100,$c4(a6)
  7717.  move.w #$0200,intreq(a6)
  7718. nofinish2:
  7719.  
  7720.  tst.b NoiseMade1pRIGHT
  7721.  beq.s NoChan2sound
  7722.  
  7723.  move.l Samp1endRIGHT,d0
  7724.  move.l pos1RIGHT,d1
  7725.  sub.l d1,d0
  7726.  lsr.l #1,d0
  7727.  move.w d0,$c4(a6)
  7728.  move.w d0,playnull2
  7729.  
  7730.  move.l d1,$c0(a6)
  7731.  move.w #$8204,dmacon(a6)
  7732.  moveq #0,d0
  7733.  move.b vol1right,d0
  7734.  move.w d0,$c8(a6)
  7735.  
  7736. NoChan2sound:
  7737.  
  7738. *****************************************
  7739. *****************************************
  7740.  
  7741.  btst #2,intreqr(a6)
  7742.  beq.s nofinish3
  7743.  move.l #null,$d0(a6)
  7744.  move.w #100,$d4(a6)
  7745.  move.w #$0400,intreq(a6)
  7746. nofinish3:
  7747.  
  7748.  tst.b NoiseMade1pLEFT
  7749.  beq.s NoChan3sound
  7750.  
  7751.  move.l Samp1endLEFT,d0
  7752.  move.l pos1LEFT,d1
  7753.  sub.l d1,d0
  7754.  lsr.l #1,d0
  7755.  move.w d0,$d4(a6)
  7756.  move.w d0,playnull3
  7757.  move.l d1,$d0(a6)
  7758.  move.w #$8208,dmacon(a6)
  7759.  moveq #0,d0
  7760.  move.b vol1left,d0
  7761.  move.w d0,$d8(a6)
  7762.  
  7763. NoChan3sound:
  7764.  
  7765. nomorechannels:
  7766.  
  7767.  move.l NoiseMade0LEFT,NoiseMade0pLEFT
  7768.  move.l #0,NoiseMade0LEFT
  7769.  move.l NoiseMade0RIGHT,NoiseMade0pRIGHT
  7770.  move.l #0,NoiseMade0RIGHT
  7771.  
  7772. ; tst.b playnull0
  7773. ; beq.s .nnul
  7774. ; sub.b #1,playnull0
  7775. ; bra.s chan0still
  7776. ;.nnul:
  7777. ;chan0still:
  7778.  
  7779.  tst.b NoiseMade0pLEFT
  7780.  bne.s chan0still
  7781.  tst.w playnull0
  7782.  beq.s nnul0
  7783.  sub.w #100,playnull0
  7784.  bra.s chan0still
  7785. nnul0:
  7786.  move.w #0,LEFTCHANDATA+2
  7787.  st LEFTCHANDATA+1
  7788. chan0still:
  7789.  
  7790.  tst.b NoiseMade0pRIGHT
  7791.  bne.s chan1still
  7792.  tst.w playnull1
  7793.  beq.s nnul1
  7794.  sub.w #100,playnull1
  7795.  bra.s chan1still
  7796. nnul1:
  7797.  move.w #0,RIGHTCHANDATA+2
  7798.  st RIGHTCHANDATA+1
  7799. chan1still:
  7800.  
  7801.  tst.b NoiseMade1pRIGHT
  7802.  bne.s chan2still
  7803.  tst.w playnull2
  7804.  beq.s nnul2
  7805.  sub.w #100,playnull2
  7806.  bra.s chan2still
  7807. nnul2:
  7808.  move.w #0,RIGHTCHANDATA+2+4
  7809.  st RIGHTCHANDATA+1+4
  7810. chan2still:
  7811.  
  7812.  tst.b NoiseMade1pLEFT
  7813.  bne.s chan3still
  7814.  tst.w playnull3
  7815.  beq.s nnul3
  7816.  sub.w #100,playnull3
  7817.  bra.s chan3still
  7818. nnul3:
  7819.  move.w #0,LEFTCHANDATA+2+4
  7820.  st LEFTCHANDATA+1+4
  7821.  
  7822. chan3still:
  7823.  
  7824.  
  7825.  movem.l (a7)+,d0-d7/a0-a6
  7826.  
  7827.  rte
  7828.  
  7829. backbeat: dc.w 0
  7830.  
  7831. playnull0: dc.w 0
  7832. playnull1: dc.w 0
  7833. playnull2: dc.w 0
  7834. playnull3: dc.w 0
  7835.  
  7836. Samp0endRIGHT: dc.l emptyend
  7837. Samp1endRIGHT: dc.l emptyend
  7838. Samp2endRIGHT: dc.l emptyend
  7839. Samp3endRIGHT: dc.l emptyend
  7840. Samp0endLEFT: dc.l emptyend
  7841. Samp1endLEFT: dc.l emptyend
  7842. Samp2endLEFT: dc.l emptyend
  7843. Samp3endLEFT: dc.l emptyend
  7844.  
  7845. Aupt0: dc.l null
  7846. Auback0: dc.l null+500
  7847. Aupt2: dc.l null3
  7848. Auback2: dc.l null3+500
  7849. Aupt3: dc.l null4
  7850. Auback3: dc.l null4+500
  7851. Aupt1: dc.l null2
  7852. Auback1: dc.l null2+500
  7853.  
  7854. NoiseMade0LEFT: dc.b 0
  7855. NoiseMade1LEFT: dc.b 0
  7856. NoiseMade2LEFT: dc.b 0
  7857. NoiseMade3LEFT: dc.b 0
  7858. NoiseMade0pLEFT: dc.b 0
  7859. NoiseMade1pLEFT: dc.b 0
  7860. NoiseMade2pLEFT: dc.b 0
  7861. NoiseMade3pLEFT: dc.b 0
  7862. NoiseMade0RIGHT: dc.b 0
  7863. NoiseMade1RIGHT: dc.b 0
  7864. NoiseMade2RIGHT: dc.b 0
  7865. NoiseMade3RIGHT: dc.b 0
  7866. NoiseMade0pRIGHT: dc.b 0
  7867. NoiseMade1pRIGHT: dc.b 0
  7868. NoiseMade2pRIGHT: dc.b 0
  7869. NoiseMade3pRIGHT: dc.b 0
  7870.  
  7871. empty: ds.l 100
  7872. emptyend:
  7873.  
  7874. **************************************
  7875. * I want a routine to calculate all the
  7876. * info needed for the sound player to
  7877. * work, given say position of noise, volume
  7878. * and sample number.
  7879.  
  7880. Samplenum: dc.w 0
  7881. Noisex: dc.w 0
  7882. Noisez: dc.w 0
  7883. Noisevol: dc.w 0
  7884. chanpick: dc.w 0
  7885. IDNUM: dc.w 0
  7886. needleft: dc.b 0
  7887. needright: dc.b 0
  7888. STEREO: dc.b $0
  7889. even
  7890. prot6: dc.w 0
  7891.  
  7892.  even
  7893.  
  7894. CHANNELDATA:
  7895. LEFTCHANDATA:
  7896.  dc.l $00000000
  7897.  dc.l $00000000
  7898.  dc.l $FF000000
  7899.  dc.l $FF000000
  7900. RIGHTCHANDATA:
  7901.  dc.l $00000000
  7902.  dc.l $00000000
  7903.  dc.l $FF000000
  7904.  dc.l $FF000000
  7905.  
  7906. RIGHTPLAYEDTAB: ds.l 20
  7907. LEFTPLAYEDTAB: ds.l 20
  7908.  
  7909. MakeSomeNoise:
  7910.  
  7911. ; Plan for new sound handler:
  7912. ; It is sent a sample number,
  7913. ; a position relative to the
  7914. ; player, an id number and a volume.
  7915. ; Also notifplaying.
  7916.  
  7917. ; indirect inputs are the available
  7918. ; channel flags and whether or not
  7919. ; stereo sound is selected.
  7920.  
  7921. ; the algorithm must decide
  7922. ; whether the new sound is more
  7923. ; important than the ones already
  7924. ; playing. Thus an 'importance'
  7925. ; must be calculated, probably
  7926. ; using volume.
  7927.  
  7928. ; The output needs to be:
  7929.  
  7930. ; Write the pointers and volumes of
  7931. ; the sound channels
  7932.  
  7933.  
  7934.  tst.b notifplaying
  7935.  beq.s dontworry
  7936.  
  7937. ; find if we are already playing
  7938.  
  7939.  move.b IDNUM,d0
  7940.  move.w #7,d1
  7941.  lea CHANNELDATA,a3
  7942. findsameasme
  7943.  tst.b (a3)
  7944.  bne.s notavail
  7945.  cmp.b 1(a3),d0
  7946.  beq SameAsMe
  7947. notavail:
  7948.  add.w #4,a3
  7949.  dbra d1,findsameasme
  7950.  bra dontworry
  7951. SameAsMe
  7952.  rts
  7953.  
  7954. noiseloud: dc.w 0
  7955.  
  7956. dontworry:
  7957.  
  7958. ; Ok its fine for us to play a sound.
  7959. ; So calculate left/right volume.
  7960.  
  7961.  move.w Noisex,d1
  7962.  muls d1,d1
  7963.  move.w Noisez,d2
  7964.  muls d2,d2
  7965.  move.w #64,d3
  7966.  move.w #32767,noiseloud
  7967.  moveq #1,d0
  7968.  add.l d1,d2
  7969.  beq pastcalc
  7970.  
  7971.  move.w #31,d0
  7972. .findhigh
  7973.  btst d0,d2
  7974.  bne .foundhigh
  7975.  dbra d0,.findhigh
  7976. .foundhigh
  7977.  asr.w #1,d0
  7978.  clr.l d3
  7979.  bset d0,d3
  7980.  move.l d3,d0
  7981.  
  7982.  move.w d0,d3
  7983.  muls d3,d3    ; x*x
  7984.  sub.l d2,d3    ; x*x-a
  7985.  asr.l #1,d3    ; (x*x-a)/2
  7986.  divs d0,d3    ; (x*x-a)/2x
  7987.  sub.w d3,d0    ; second approx
  7988.  bgt .stillnot0
  7989.  move.w #1,d0
  7990. .stillnot0
  7991.  
  7992.  move.w d0,d3
  7993.  muls d3,d3
  7994.  sub.l d2,d3
  7995.  asr.l #1,d3
  7996.  divs d0,d3
  7997.  sub.w d3,d0    ; second approx
  7998.  bgt .stillnot02
  7999.  move.w #1,d0
  8000. .stillnot02
  8001.  
  8002.  move.w Noisevol,d3
  8003.  ext.l d3
  8004.  asl.l #6,d3
  8005.  cmp.l #32767,d3
  8006.  ble.s .nnnn
  8007.  move.l #32767,d3
  8008. .nnnn
  8009.  
  8010.  asr.w #2,d0
  8011.  addq #1,d0
  8012.  divs d0,d3
  8013.  
  8014.  move.w d3,noiseloud
  8015.  
  8016.  cmp.w #64,d3
  8017.  ble.s notooloud
  8018.  move.w #64,d3
  8019. notooloud:
  8020.  
  8021. pastcalc:
  8022.  
  8023.     ; d3 contains volume of noise.
  8024.     
  8025.  move.w d3,d4
  8026.  
  8027.  move.w d3,d2
  8028.  muls Noisex,d2
  8029.  asl.w #3,d0
  8030.  divs d0,d2
  8031.  
  8032.  bgt.s quietleft
  8033.  add.w d2,d4
  8034.  bge.s donequiet
  8035.  move.w #0,d4
  8036.  bra.s donequiet
  8037. quietleft:
  8038.  sub.w d2,d3
  8039.  bge.s donequiet
  8040.  move.w #0,d3
  8041. donequiet:
  8042.  
  8043. ; d3=leftvol?
  8044. ; d4=rightvol?
  8045.  
  8046.  clr.w needleft
  8047.  
  8048.  cmp.b d3,d4
  8049.  bgt.s RightLouder
  8050.  
  8051. ; Left is louder; is it MUCH louder?
  8052.  
  8053.  st needleft
  8054.  move.w d3,d2
  8055.  sub.w d4,d2
  8056.  cmp.w #32,d2
  8057.  slt needright
  8058.  bra aboutsame
  8059.  
  8060. RightLouder:
  8061.  st needright
  8062.  move.w d4,d2
  8063.  sub.w d3,d2
  8064.  cmp.w #32,d2
  8065.  slt needleft
  8066.  
  8067. aboutsame:
  8068.  
  8069.  tst.b STEREO
  8070.  beq NOSTEREO
  8071.  
  8072. ; Find least important sound on left
  8073.  
  8074.  move.l #0,a2
  8075.  move.l #0,d5
  8076.  move.w #32767,d2
  8077.  move.b IDNUM,d0
  8078.  lea LEFTCHANDATA,a3
  8079.  move.w #3,d1
  8080. FindLeftChannel
  8081.  tst.b (a3)
  8082.  bne.s .notactive
  8083.  cmp.b 1(a3),d0
  8084.  beq.s FOUNDLEFT
  8085.  cmp.w 2(a3),d2
  8086.  blt.s .notactive
  8087.  move.w 2(a3),d2
  8088.  move.l a3,a2
  8089.  move.w d5,d6
  8090.  
  8091. .notactive:
  8092.  add.w #4,a3
  8093.  add.w #1,d5
  8094.  dbra d1,FindLeftChannel
  8095.  move.l a2,a3
  8096.  bra.s gopastleft
  8097. FOUNDLEFT:
  8098.  move.w d5,d6
  8099. gopastleft:
  8100.  tst.l a3
  8101.  bne.s FOUNDALEFT
  8102.  rts
  8103. FOUNDALEFT:
  8104.  
  8105. ; d6 = channel number
  8106.  move.b d0,1(a3)
  8107.  move.w d3,2(a3)
  8108.  
  8109.  move.w Samplenum,d5
  8110.  move.l #SampleList,a3
  8111.  move.l (a3,d5.w*8),a1
  8112.  move.l 4(a3,d5.w*8),a2
  8113.  
  8114.  tst.b d6
  8115.  seq NoiseMade0LEFT
  8116.  beq.s .chan0
  8117.  cmp.b #2,d6
  8118.  slt NoiseMade1LEFT
  8119.  blt .chan1
  8120.  seq NoiseMade2LEFT
  8121.  beq .chan2
  8122.  st NoiseMade3LEFT
  8123.  
  8124.  move.b d5,LEFTPLAYEDTAB+9
  8125.  move.b d3,LEFTPLAYEDTAB+1+9
  8126.  move.b d4,LEFTPLAYEDTAB+2+9
  8127.  move.b d3,vol3left
  8128.  move.l a1,pos3LEFT
  8129.  move.l a2,Samp3endLEFT
  8130.  bra dorightchan
  8131.  
  8132. .chan0: 
  8133.  move.b d5,LEFTPLAYEDTAB
  8134.  move.b d3,LEFTPLAYEDTAB+1
  8135.  move.b d4,LEFTPLAYEDTAB+2
  8136.  move.l a1,pos0LEFT
  8137.  move.l a2,Samp0endLEFT
  8138.  move.b d3,vol0left
  8139.  bra dorightchan
  8140.  
  8141. .chan1:
  8142.  move.b d5,LEFTPLAYEDTAB+3
  8143.  move.b d3,LEFTPLAYEDTAB+1+3
  8144.  move.b d4,LEFTPLAYEDTAB+2+3
  8145.  move.b d3,vol1left
  8146.  move.l a1,pos1LEFT
  8147.  move.l a2,Samp1endLEFT
  8148.  bra dorightchan
  8149.  
  8150. .chan2: 
  8151.  move.b d5,LEFTPLAYEDTAB+6
  8152.  move.b d3,LEFTPLAYEDTAB+1+6
  8153.  move.b d4,LEFTPLAYEDTAB+2+6
  8154.  move.l a1,pos2LEFT
  8155.  move.l a2,Samp2endLEFT
  8156.  move.b d3,vol2left
  8157.  
  8158. dorightchan:
  8159.  
  8160. ; Find least important sound on right
  8161.  
  8162.  move.l #0,a2
  8163.  move.l #0,d5
  8164.  move.w #10000,d2
  8165.  move.b IDNUM,d0
  8166.  lea RIGHTCHANDATA,a3
  8167.  move.w #3,d1
  8168. FindRightChannel
  8169.  tst.b (a3)
  8170.  bne.s .notactive
  8171.  cmp.b 1(a3),d0
  8172.  beq.s FOUNDRIGHT
  8173.  cmp.w 2(a3),d2
  8174.  blt.s .notactive
  8175.  move.w 2(a3),d2
  8176.  move.l a3,a2
  8177.  move.w d5,d6
  8178.  
  8179. .notactive:
  8180.  add.w #4,a3
  8181.  add.w #1,d5
  8182.  dbra d1,FindRightChannel
  8183.  move.l a2,a3
  8184.  bra.s gopastright
  8185. FOUNDRIGHT:
  8186.  move.w d5,d6
  8187. gopastright:
  8188.  tst.l a3
  8189.  bne.s FOUNDARIGHT
  8190.  rts
  8191. FOUNDARIGHT:
  8192.  
  8193. ; d6 = channel number
  8194.  move.b d0,1(a3)
  8195.  move.w d3,2(a3)
  8196.  
  8197.  move.w Samplenum,d5
  8198.  move.l #SampleList,a3
  8199.  move.l (a3,d5.w*8),a1
  8200.  move.l 4(a3,d5.w*8),a2
  8201.  
  8202.  tst.b d6
  8203.  seq NoiseMade0RIGHT
  8204.  beq.s .chan0
  8205.  cmp.b #2,d6
  8206.  slt NoiseMade1RIGHT
  8207.  blt .chan1
  8208.  seq NoiseMade2RIGHT
  8209.  beq .chan2
  8210.  st NoiseMade3RIGHT
  8211.  
  8212.  move.b d5,RIGHTPLAYEDTAB+9
  8213.  move.b d3,RIGHTPLAYEDTAB+1+9
  8214.  move.b d4,RIGHTPLAYEDTAB+2+9
  8215.  move.b d4,vol3right
  8216.  move.l a1,pos3RIGHT
  8217.  move.l a2,Samp3endRIGHT
  8218.  rts
  8219.  
  8220. .chan0: 
  8221.  move.b d5,RIGHTPLAYEDTAB
  8222.  move.b d3,RIGHTPLAYEDTAB+1
  8223.  move.b d4,RIGHTPLAYEDTAB+2
  8224.  move.l a1,pos0RIGHT
  8225.  move.l a2,Samp0endRIGHT
  8226.  move.b d4,vol0right
  8227.  rts
  8228.  
  8229. .chan1:
  8230.  move.b d5,RIGHTPLAYEDTAB+3
  8231.  move.b d3,RIGHTPLAYEDTAB+1+3
  8232.  move.b d4,RIGHTPLAYEDTAB+2+3
  8233.  move.b d3,vol1right
  8234.  move.l a1,pos1RIGHT
  8235.  move.l a2,Samp1endRIGHT
  8236.  rts
  8237.  
  8238. .chan2: 
  8239.  move.b d5,RIGHTPLAYEDTAB+6
  8240.  move.b d3,RIGHTPLAYEDTAB+1+6
  8241.  move.b d4,RIGHTPLAYEDTAB+2+6
  8242.  move.l a1,pos2RIGHT
  8243.  move.l a2,Samp2endRIGHT
  8244.  move.b d3,vol2right
  8245.  rts
  8246.  
  8247. NOSTEREO:
  8248.  move.l #0,a2
  8249.  move.l #-1,d5
  8250.  move.w #32767,d2
  8251.  move.b IDNUM,d0
  8252.  lea CHANNELDATA,a3
  8253.  move.w #7,d1
  8254. FindChannel
  8255.  tst.b (a3)
  8256.  bne.s .notactive
  8257.  cmp.b 1(a3),d0
  8258.  beq.s FOUNDCHAN
  8259.  cmp.w 2(a3),d2
  8260.  blt.s .notactive
  8261.  move.w 2(a3),d2
  8262.  move.l a3,a2
  8263.  move.w d5,d6
  8264.  add.w #1,d6
  8265.  
  8266. .notactive:
  8267.  add.w #4,a3
  8268.  add.w #1,d5
  8269.  dbra d1,FindChannel
  8270.  
  8271.  move.l a2,a3
  8272.  bra.s gopastchan
  8273. FOUNDCHAN:
  8274.  move.w d5,d6
  8275.  add.w #1,d6
  8276. gopastchan:
  8277.  tst.w d6
  8278.  bge.s FOUNDACHAN
  8279. tooquiet:
  8280.  rts
  8281. FOUNDACHAN:
  8282.  
  8283. ; d6 = channel number
  8284.  
  8285.  cmp.w noiseloud,d2
  8286.  bgt.s tooquiet
  8287.  
  8288.  move.b d0,1(a3)
  8289.  move.w noiseloud,2(a3)
  8290.  
  8291.  move.w Samplenum,d5
  8292.  move.l #SampleList,a3
  8293.  move.l (a3,d5.w*8),a1
  8294.  move.l 4(a3,d5.w*8),a2
  8295.  
  8296.  tst.b d6
  8297.  beq .chan0
  8298.  cmp.b #2,d6
  8299.  blt .chan1
  8300.  beq .chan2
  8301.  cmp.b #4,d6
  8302.  blt .chan3
  8303.  beq .chan4
  8304.  cmp.b #6,d6
  8305.  blt .chan5
  8306.  beq .chan6
  8307.  st NoiseMade3RIGHT
  8308.  
  8309.  move.b d5,RIGHTPLAYEDTAB+9
  8310.  move.b d3,RIGHTPLAYEDTAB+1+9
  8311.  move.b d4,RIGHTPLAYEDTAB+2+9
  8312.  move.b d4,vol3right
  8313.  move.l a1,pos3RIGHT
  8314.  move.l a2,Samp3endRIGHT
  8315.  rts
  8316.  
  8317. .chan3:
  8318.  st NoiseMade3LEFT
  8319.  move.b d5,LEFTPLAYEDTAB+9
  8320.  move.b d3,LEFTPLAYEDTAB+1+9
  8321.  move.b d4,LEFTPLAYEDTAB+2+9
  8322.  move.b d3,vol3left
  8323.  move.l a1,pos3LEFT
  8324.  move.l a2,Samp3endLEFT
  8325.  bra dorightchan
  8326.  
  8327. .chan0: 
  8328.  st NoiseMade0LEFT
  8329.  move.b d5,LEFTPLAYEDTAB
  8330.  move.b d3,LEFTPLAYEDTAB+1
  8331.  move.b d4,LEFTPLAYEDTAB+2
  8332.  move.l a1,pos0LEFT
  8333.  move.l a2,Samp0endLEFT
  8334.  move.b d3,vol0left
  8335.  rts
  8336.  
  8337. .chan1:
  8338.  st NoiseMade1LEFT
  8339.  move.b d5,LEFTPLAYEDTAB+3
  8340.  move.b d3,LEFTPLAYEDTAB+1+3
  8341.  move.b d4,LEFTPLAYEDTAB+2+3
  8342.  move.b d3,vol1left
  8343.  move.l a1,pos1LEFT
  8344.  move.l a2,Samp1endLEFT
  8345.  rts
  8346.  
  8347. .chan2: 
  8348.  st NoiseMade2LEFT
  8349.  move.b d5,LEFTPLAYEDTAB+6
  8350.  move.b d3,LEFTPLAYEDTAB+1+6
  8351.  move.b d4,LEFTPLAYEDTAB+2+6
  8352.  move.l a1,pos2LEFT
  8353.  move.l a2,Samp2endLEFT
  8354.  move.b d3,vol2left
  8355.  rts
  8356.  
  8357. .chan4: 
  8358.  st NoiseMade0RIGHT
  8359.  move.b d5,RIGHTPLAYEDTAB
  8360.  move.b d3,RIGHTPLAYEDTAB+1
  8361.  move.b d4,RIGHTPLAYEDTAB+2
  8362.  move.l a1,pos0RIGHT
  8363.  move.l a2,Samp0endRIGHT
  8364.  move.b d4,vol0right
  8365.  rts
  8366.  
  8367. .chan5:
  8368.  st NoiseMade1RIGHT
  8369.  move.b d5,RIGHTPLAYEDTAB+3
  8370.  move.b d3,RIGHTPLAYEDTAB+1+3
  8371.  move.b d4,RIGHTPLAYEDTAB+2+3
  8372.  move.b d3,vol1right
  8373.  move.l a1,pos1RIGHT
  8374.  move.l a2,Samp1endRIGHT
  8375.  rts
  8376.  
  8377. .chan6: 
  8378.  st NoiseMade2RIGHT
  8379.  move.b d5,RIGHTPLAYEDTAB+6
  8380.  move.b d3,RIGHTPLAYEDTAB+1+6
  8381.  move.b d4,RIGHTPLAYEDTAB+2+6
  8382.  move.l a1,pos2RIGHT
  8383.  move.l a2,Samp2endRIGHT
  8384.  move.b d3,vol2right
  8385.  rts
  8386.  
  8387. SampleList:
  8388.  dc.l Scream,EndScream
  8389.  dc.l Shoot,EndShoot
  8390.  dc.l Munch,EndMunch
  8391.  dc.l PooGun,EndPooGun
  8392.  dc.l Collect,EndCollect
  8393. ;5
  8394.  dc.l DoorNoise,EndDoorNoise
  8395.  dc.l 0,0
  8396.  dc.l Stomp,EndStomp
  8397.  dc.l LowScream,EndLowScream
  8398.  dc.l BaddieGun,EndBaddieGun
  8399. ;10
  8400.  dc.l SwitchNoise,EndSwitch
  8401.  dc.l Reload,EndReload
  8402.  dc.l NoAmmo,EndNoAmmo
  8403.  dc.l Splotch,EndSplotch
  8404.  dc.l SplatPop,EndSplatPop
  8405. ;15
  8406.  dc.l Boom,EndBoom
  8407.  dc.l Hiss,EndHiss
  8408.  dc.l Howl1,EndHowl1
  8409.  dc.l Howl2,EndHowl2
  8410.  dc.l Pant,EndPant
  8411. ;20
  8412.  dc.l Whoosh,EndWhoosh
  8413.  dc.l ROAR,EndROAR
  8414.  dc.l whoosh,Endwhoosh
  8415.  dc.l 0,0
  8416.  dc.l 0,0
  8417.  dc.l 0,0
  8418.  dc.l 0,0
  8419.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8420.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8421.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8422.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8423.  
  8424.  dc.l 0
  8425.  
  8426. storeval: dc.w 0
  8427.  
  8428.  include "ab3:source/wallchunk.s"
  8429.  include "ab3:source/loadfromdisk.s"
  8430.  include "ab3:source/screensetup.s"
  8431.  include "ab3:source/CONTROLLOOP.s"
  8432.  
  8433.  
  8434.  
  8435.  
  8436. saveinters:  
  8437.  dc.w 0
  8438.  
  8439. z: dc.w 10
  8440.  
  8441. notifplaying:
  8442.  dc.w 0
  8443.  
  8444. audpos1: dc.w 0
  8445. audpos1b: dc.w 0
  8446. audpos2: dc.w 0
  8447. audpos2b: dc.w 0
  8448. audpos3: dc.w 0
  8449. audpos3b: dc.w 0
  8450. audpos4: dc.w 0
  8451. audpos4b: dc.w 0
  8452.  
  8453. vol0left: dc.w 0
  8454. vol0right: dc.w 0
  8455. vol1left: dc.w 0
  8456. vol1right: dc.w 0
  8457. vol2left: dc.w 0
  8458. vol2right: dc.w 0
  8459. vol3left: dc.w 0
  8460. vol3right: dc.w 0
  8461.  
  8462. pos: dc.l 0
  8463.  
  8464. pos0LEFT: dc.l empty
  8465. pos1LEFT: dc.l empty
  8466. pos2LEFT: dc.l empty
  8467. pos3LEFT: dc.l empty
  8468. pos0RIGHT: dc.l empty
  8469. pos1RIGHT: dc.l empty
  8470. pos2RIGHT: dc.l empty
  8471. pos3RIGHT: dc.l empty
  8472.  
  8473. numtodo dc.w 0
  8474.  
  8475. npt: dc.w 0
  8476.  
  8477. pretab:
  8478. val SET 0
  8479.  REPT 128
  8480.  dc.b val
  8481. val SET val+1
  8482.  ENDR
  8483. val SET -128
  8484.  REPT 128
  8485.  dc.b val
  8486. val SET val+1
  8487.  ENDR 
  8488.  
  8489. tab:
  8490.  ds.b 256*65
  8491.  
  8492.  
  8493. test: dc.l 0
  8494.  ds.l 30
  8495.  
  8496.  even
  8497. ConstCols:
  8498. ; incbin "ConstCols"
  8499.  even
  8500. Smoothscalecols:
  8501. ; incbin "smoothbumppalscaled"
  8502.  even
  8503. SmoothTile:
  8504. ; incbin "smoothbumptile"
  8505.  even
  8506. Bumpscalecols:
  8507. ; incbin "Bumppalscaled"
  8508.  even
  8509. Bumptile:
  8510. ; incbin "bumptile"
  8511.  even
  8512. scalecols: ;incbin "bytepixpalscaled"
  8513.  even
  8514. floorscalecols:
  8515.  incbin "floorpalscaled"
  8516.  ds.w 256*4
  8517.  
  8518.  even
  8519. PaletteAddr: dc.l 0
  8520. ChunkAddr: dc.l 0
  8521. ;walltiles:
  8522. ; dc.l GreenMechanicWALL
  8523. ; dc.l BlueGreyMetalWALL
  8524. ; dc.l TechnoDetailWALL
  8525. ; dc.l BlueStoneWALL
  8526. ; dc.l RedAlertWALL
  8527. ; dc.l RockWALL
  8528. ;
  8529. ;GreenMechanicWALL: incbin "ab3:includes/walls/greenmechanic.wad"
  8530. ;BlueGreyMetalWALL: incbin "ab3:includes/walls/BlueGreyMetal.wad"
  8531. ;TechnoDetailWALL: incbin "ab3:includes/walls/TechnoDetail.wad"
  8532. ;BlueStoneWALL: incbin "ab3:includes/walls/bluestone.wad"
  8533. ;RedAlertWALL: incbin "ab3:includes/walls/redalert.wad"
  8534. ;RockWALL: incbin "ab3:includes/walls/rock.wad"
  8535.  
  8536. floortile:
  8537.  dc.l 0
  8538. ; incbin "floortile" 
  8539.  even
  8540. wallrouts:
  8541. ; incbin "2x2WallDraw" 
  8542.  CNOP 0,64
  8543. BackPicture:
  8544.  incbin "backfile"
  8545. EndBackPicture:
  8546.  
  8547. drawpt: dc.l 0
  8548. olddrawpt: dc.l 0
  8549. frompt: dc.l 0 
  8550.  
  8551. SineTable:
  8552.  incbin "bigsine"
  8553.  
  8554. angspd: dc.w 0
  8555. flooryoff: dc.w 0
  8556. xoff: dc.l 0
  8557. yoff: dc.l 0
  8558. yvel: dc.l 0
  8559. zoff: dc.l 0
  8560. tyoff: dc.l 0
  8561. xspdval: dc.l 0
  8562. zspdval: dc.l 0
  8563. Zone: dc.w 0
  8564.  
  8565. PLR1: dc.b $ff
  8566.  even
  8567. PLR1_energy: dc.w 191
  8568. PLR1_GunSelected: dc.w 0
  8569. PLR1_cosval: dc.w 0
  8570. PLR1_sinval: dc.w 0
  8571. PLR1_angpos: dc.w 0
  8572. PLR1_angspd: dc.w 0
  8573. PLR1_xoff: dc.l 0
  8574. PLR1_yoff: dc.l 0
  8575. PLR1_yvel: dc.l 0
  8576. PLR1_zoff: dc.l 0
  8577. PLR1_tyoff: dc.l 0
  8578. PLR1_xspdval: dc.l 0
  8579. PLR1_zspdval: dc.l 0
  8580. PLR1_Zone: dc.w 0
  8581. PLR1_Roompt: dc.l 0
  8582. PLR1_OldRoompt: dc.l 0
  8583. PLR1_PointsToRotatePtr: dc.l 0
  8584. PLR1_ListOfGraphRooms: dc.l 0
  8585. PLR1_oldxoff: dc.l 0
  8586. PLR1_oldzoff: dc.l 0
  8587. PLR1_StoodInTop: dc.b 0
  8588.  even
  8589. PLR1_height: dc.l 0
  8590.  
  8591.  ds.w 4
  8592.  
  8593. OLDX1: dc.l 0
  8594. OLDX2: dc.l 0
  8595. OLDZ1: dc.l 0
  8596. OLDZ2: dc.l 0
  8597.  
  8598. XDIFF1: dc.l 0
  8599. ZDIFF1: dc.l 0
  8600. XDIFF2: dc.l 0
  8601. ZDIFF2: dc.l 0
  8602.  
  8603. PLR1s_cosval: dc.w 0
  8604. PLR1s_sinval: dc.w 0
  8605. PLR1s_angpos: dc.w 0
  8606. PLR1s_angspd: dc.w 0
  8607. PLR1s_xoff: dc.l 0
  8608. PLR1s_yoff: dc.l 0
  8609. PLR1s_yvel: dc.l 0
  8610. PLR1s_zoff: dc.l 0
  8611. PLR1s_tyoff: dc.l 0
  8612. PLR1s_xspdval: dc.l 0
  8613. PLR1s_zspdval: dc.l 0
  8614. PLR1s_Zone: dc.w 0
  8615. PLR1s_Roompt: dc.l 0
  8616. PLR1s_OldRoompt: dc.l 0
  8617. PLR1s_PointsToRotatePtr: dc.l 0
  8618. PLR1s_ListOfGraphRooms: dc.l 0
  8619. PLR1s_oldxoff: dc.l 0
  8620. PLR1s_oldzoff: dc.l 0
  8621. PLR1s_height: dc.l 0
  8622. PLR1s_targheight: dc.l 0
  8623.  
  8624. p1_xoff: dc.l 0
  8625. p1_zoff: dc.l 0
  8626. p1_yoff: dc.l 0
  8627. p1_height: dc.l 0
  8628. p1_angpos: dc.w 0
  8629. p1_bobble: dc.w 0
  8630. p1_clicked: dc.b 0
  8631. p1_spctap: dc.b 0
  8632. p1_ducked: dc.b 0
  8633. p1_gunselected: dc.b 0
  8634. p1_fire: dc.b 0
  8635.  even
  8636. p1_holddown: dc.w 0
  8637.  
  8638.  ds.w 4
  8639.  
  8640. PLR2: dc.b $ff
  8641.  even
  8642. PLR2_GunSelected: dc.w 0
  8643. PLR2_energy: dc.w 191
  8644. PLR2_cosval: dc.w 0
  8645. PLR2_sinval: dc.w 0
  8646. PLR2_angpos: dc.w 0
  8647. PLR2_angspd: dc.w 0
  8648. PLR2_xoff: dc.l 0
  8649. PLR2_yoff: dc.l 0
  8650. PLR2_yvel: dc.l 0
  8651. PLR2_zoff: dc.l 0
  8652. PLR2_tyoff: dc.l 0
  8653. PLR2_xspdval: dc.l 0
  8654. PLR2_zspdval: dc.l 0
  8655. PLR2_Zone: dc.w 0
  8656. PLR2_Roompt: dc.l 0
  8657. PLR2_OldRoompt: dc.l 0
  8658. PLR2_PointsToRotatePtr: dc.l 0
  8659. PLR2_ListOfGraphRooms: dc.l 0
  8660. PLR2_oldxoff: dc.l 0
  8661. PLR2_oldzoff: dc.l 0
  8662. PLR2_StoodInTop: dc.b 0
  8663.  even
  8664. PLR2_height: dc.l 0
  8665.  
  8666.  ds.w 4
  8667.  
  8668. PLR2s_cosval: dc.w 0
  8669. PLR2s_sinval: dc.w 0
  8670. PLR2s_angpos: dc.w 0
  8671. PLR2s_angspd: dc.w 0
  8672. PLR2s_xoff: dc.l 0
  8673. PLR2s_yoff: dc.l 0
  8674. PLR2s_yvel: dc.l 0
  8675. PLR2s_zoff: dc.l 0
  8676. PLR2s_tyoff: dc.l 0
  8677. PLR2s_xspdval: dc.l 0
  8678. PLR2s_zspdval: dc.l 0
  8679. PLR2s_Zone: dc.w 0
  8680. PLR2s_Roompt: dc.l 0
  8681. PLR2s_OldRoompt: dc.l 0
  8682. PLR2s_PointsToRotatePtr: dc.l 0
  8683. PLR2s_ListOfGraphRooms: dc.l 0
  8684. PLR2s_oldxoff: dc.l 0
  8685. PLR2s_oldzoff: dc.l 0
  8686. PLR2s_height: dc.l 0
  8687. PLR2s_targheight: dc.l 0
  8688.  
  8689.  ds.w 4
  8690.  
  8691. p2_xoff: dc.l 0
  8692. p2_zoff: dc.l 0
  8693. p2_yoff: dc.l 0
  8694. p2_height: dc.l 0
  8695. p2_angpos: dc.w 0
  8696. p2_bobble: dc.w 0
  8697. p2_clicked: dc.b 0
  8698. p2_spctap: dc.b 0
  8699. p2_ducked: dc.b 0
  8700. p2_gunselected: dc.b 0
  8701. p2_fire: dc.b 0
  8702.  even
  8703. p2_holddown: dc.w 0
  8704.  
  8705.  
  8706. liftanimtab:
  8707.  
  8708.  
  8709. endliftanimtab:
  8710.  
  8711. glassball:
  8712. ; incbin "glassball.inc"
  8713. endglass
  8714. glassballpt: dc.l glassball
  8715.  
  8716. rndtab: ; incbin "randfile"
  8717. endrnd: 
  8718.  
  8719. brightanimtab:
  8720.  dcb.w 200,20
  8721.  dc.w 5
  8722.  dc.w 10,20
  8723.  dc.w 5
  8724.  dcb.w 30,20
  8725.  dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  8726.  dcb.w 40,0
  8727.  dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  8728.  dcb.w 300,0
  8729.  dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  8730.  dc.w -1
  8731.  
  8732. Roompt: dc.l 0
  8733. OldRoompt: dc.l 0
  8734.  
  8735. *****************************************************************
  8736.  *
  8737.  include "AB3:source/LevelData2"
  8738.  *
  8739. *****************************************************************
  8740.  
  8741.  
  8742. wallpt: dc.l 0
  8743. floorpt: dc.l 0
  8744.  
  8745. Rotated:
  8746.  ds.l 2*800 
  8747. ObjRotated:
  8748.  ds.l 2*500
  8749.  
  8750. OnScreen:
  8751.  ds.l 2*800 
  8752.  
  8753. startwait: dc.w 0
  8754. endwait: dc.w 0
  8755.  
  8756. Faces:; incbin "faces2raw"
  8757.  
  8758. *******************************************************************
  8759.  
  8760. consttab:
  8761.  incbin "constantfile"
  8762.  
  8763. *******************************************************************
  8764.  
  8765.  
  8766.  
  8767. *********************************
  8768.  
  8769. ; include "ab3:source/loadmod.a"
  8770. ; include "ab3:source/proplayer.a"
  8771.  
  8772.  
  8773. darkentab: incbin "darkenedcols"
  8774. brightentab: incbin "brightenfile"
  8775. WorkSpace:
  8776.  ds.l 8192 
  8777. waterfile: incbin "waterfile"
  8778.  
  8779.  SECTION ffff,CODE_C
  8780.  
  8781. nullspr: dc.l 0
  8782.  
  8783.  cnop 0,8
  8784. borders:
  8785.  incbin "leftbord"
  8786.  incbin "rightbord"
  8787.  
  8788. health: incbin "healthstrip"
  8789. Ammunition: incbin "ammostrip"
  8790. healthpal: incbin "healthpal"
  8791. PanelKeys: incbin "greenkey"
  8792.  incbin "redkey"
  8793.  incbin "yellowkey"
  8794.  incbin "bluekey"
  8795.  
  8796. null: ds.w 500
  8797. null2: ds.w 500
  8798. null3: ds.w 500
  8799. null4: ds.w 500
  8800.  
  8801.  
  8802. Blurbfield:
  8803.  
  8804.  dc.w bpl1ptl
  8805. bl1l: dc.w 0
  8806.  dc.w bpl1pth
  8807. bl1h: dc.w 0
  8808.  
  8809.  dc.w diwstart,$2c81
  8810.  dc.w diwstop,$1cc1
  8811.  dc.w ddfstart,$38
  8812.  dc.w ddfstop,$b8
  8813.  dc.w bplcon0,$9201
  8814.  dc.w bplcon1,0
  8815.  dc.w $106,$c40
  8816. blcols:
  8817.  dc.w col0,0
  8818.  dc.w col1,$fff
  8819.  
  8820.  dc.w $108,0
  8821.  dc.w $10a,0
  8822.  
  8823.  dc.w $ffff,$fffe
  8824.  dc.w $ffff,$fffe
  8825.  
  8826. nullline:
  8827.  ds.b 80    
  8828.  
  8829.  include "ab3:source/titlecop.s"
  8830.  
  8831. bigfield:    
  8832.                 ; Start of our copper list.
  8833.  
  8834.  dc.w dmacon,$8020
  8835.  dc.w intreq,$8011
  8836.  dc.w $1fc,$f
  8837.  dc.w diwstart
  8838. winstart: dc.w $2cb1
  8839.  dc.w diwstop
  8840. winstop: dc.w $2c91
  8841.  dc.w ddfstart
  8842. fetchstart: dc.w $48
  8843.  dc.w ddfstop
  8844. fetchstop: dc.w $88
  8845.  
  8846. bordercols:
  8847.  incbin "borderpal"
  8848.  
  8849.  dc.w spr0ptl
  8850. s0l:
  8851.  dc.w 0
  8852.  dc.w spr0pth
  8853. s0h:
  8854.  dc.w 0
  8855.  dc.w spr1ptl
  8856. s1l:
  8857.  dc.w 0
  8858.  dc.w spr1pth
  8859. s1h:
  8860.  dc.w 0
  8861.  dc.w spr2ptl
  8862. s2l:
  8863.  dc.w 0
  8864.  dc.w spr2pth
  8865. s2h:
  8866.  dc.w 0
  8867.  dc.w spr3ptl
  8868. s3l:
  8869.  dc.w 0
  8870.  dc.w spr3pth
  8871. s3h:
  8872.  dc.w 0
  8873.  dc.w spr4ptl
  8874. s4l:
  8875.  dc.w 0
  8876.  dc.w spr4pth
  8877. s4h:
  8878.  dc.w 0
  8879.  dc.w spr5ptl
  8880. s5l:
  8881.  dc.w 0
  8882.  dc.w spr5pth
  8883. s5h:
  8884.  dc.w 0
  8885.  dc.w spr6ptl
  8886. s6l:
  8887.  dc.w 0
  8888.  dc.w spr6pth
  8889. s6h:
  8890.  dc.w 0
  8891.  dc.w spr7ptl
  8892. s7l:
  8893.  dc.w 0
  8894.  dc.w spr7pth
  8895. s7h:
  8896.  dc.w 0
  8897.  
  8898.  
  8899.  dc.w $106,$c42
  8900.  incbin "borderpal"
  8901.  
  8902.  dc.w $106,$8c42
  8903.  dc.w col0
  8904. hitcol: dc.w $0
  8905.  dc.w $106,$c42
  8906.  dc.w col0
  8907. hitcol2: dc.w 0
  8908.  
  8909.  dc.w bplcon0,$7201
  8910.  dc.w bplcon1
  8911. smoff:
  8912.  dc.w $0
  8913.  
  8914.  dc.w $108
  8915. modulo: dc.w -24
  8916.  dc.w $10a,-24
  8917.  
  8918.  dc.w bpl1pth
  8919. pl1h
  8920.  dc.w 0
  8921.  
  8922.  dc.w bpl1ptl
  8923. pl1l
  8924.  dc.w 0
  8925.  
  8926.  dc.w bpl2pth
  8927. pl2h
  8928.  dc.w 0
  8929.  
  8930.  dc.w bpl2ptl
  8931. pl2l
  8932.  dc.w 0
  8933.  
  8934.  dc.w bpl3pth
  8935. pl3h
  8936.  dc.w 0
  8937.  
  8938.  dc.w bpl3ptl
  8939. pl3l
  8940.  dc.w 0
  8941.  
  8942.  dc.w bpl4pth
  8943. pl4h
  8944.  dc.w 0
  8945.  
  8946.  dc.w bpl4ptl
  8947. pl4l
  8948.  dc.w 0
  8949.  
  8950.  dc.w bpl5pth
  8951. pl5h
  8952.  dc.w 0
  8953.  
  8954.  dc.w bpl5ptl
  8955. pl5l
  8956.  dc.w 0
  8957.  
  8958.  dc.w bpl6pth
  8959. pl6h
  8960.  dc.w 0
  8961.  
  8962.  dc.w bpl6ptl
  8963. pl6l
  8964.  dc.w 0
  8965.  
  8966.  dc.w bpl7pth
  8967. pl7h
  8968.  dc.w 0
  8969.  
  8970.  dc.w bpl7ptl
  8971. pl7l
  8972.  dc.w 0
  8973.  
  8974.  
  8975.  dc.w $1001,$ff00
  8976.  dc.w intreq,$11
  8977. yposcop:
  8978.  dc.w $2a11,$fffe
  8979.  dc.w $8a,0
  8980.  
  8981. ; ds.l 104*12
  8982.  
  8983. ;colbars:
  8984. ;val SET $2a
  8985. ; dcb.l 104*80,$1fe0000
  8986. ; dc.w $106,$c42
  8987. ; dc.w $80
  8988. ;pch1:
  8989. ; dc.w 0
  8990. ; dc.w $82
  8991. ;pcl1:
  8992. ; dc.w 0 
  8993. ; dc.w $88,0
  8994. ; dc.w $ffff,$fffe       ; End copper list.
  8995.  
  8996. ; ds.l 104*12
  8997.  
  8998. ;colbars2:
  8999. ;val SET $2a
  9000. ; dcb.l 104*80,$1fe0000
  9001. ; dc.w $106,$c42
  9002. ; dc.w $80
  9003. ;pch2:
  9004. ; dc.w 0
  9005. ; dc.w $82
  9006. ;pcl2:
  9007. ; dc.w 0
  9008. ; dc.w $88,0
  9009. ; dc.w $ffff,$fffe       ; End copper list.
  9010.  
  9011. ; ds.l 104*10
  9012.  
  9013. NullCopper:
  9014.  dc.w $ffff,$fffe
  9015.  
  9016. old: dc.l 0
  9017.  
  9018. prot5: dc.w 0
  9019. PanelCop:
  9020.  
  9021.  dc.w $80
  9022. och:
  9023.  dc.w 0
  9024.  dc.w $82
  9025. ocl:
  9026.  dc.w 0
  9027.  
  9028. statskip:
  9029.  dc.w $1fe,0
  9030.  dc.w $1fe,0
  9031.  
  9032.  dc.w $10c,0
  9033.  dc.w bplcon0,$1201
  9034.  dc.w bpl1ptl
  9035. n1l:
  9036.  dc.w 0
  9037.  dc.w bpl1pth
  9038. n1h:
  9039.  dc.w 0
  9040.  dc.w $108,-24
  9041.  incbin "Panelpal"
  9042.  
  9043.  dc.w bpl2pth
  9044. p2h
  9045.  dc.w 0
  9046.  
  9047.  dc.w bpl2ptl
  9048. p2l
  9049.  dc.w 0
  9050.  
  9051.  dc.w bpl3pth
  9052. p3h
  9053.  dc.w 0
  9054.  
  9055.  dc.w bpl3ptl
  9056. p3l
  9057.  dc.w 0
  9058.  
  9059.  dc.w bpl4pth
  9060. p4h
  9061.  dc.w 0
  9062.  dc.w bpl4ptl
  9063. p4l
  9064.  dc.w 0
  9065.  dc.w bpl5pth
  9066. p5h
  9067.  dc.w 0
  9068.  dc.w bpl5ptl
  9069. p5l
  9070.  dc.w 0
  9071.  dc.w bpl6pth
  9072. p6h
  9073.  dc.w 0
  9074.  dc.w bpl6ptl
  9075. p6l
  9076.  dc.w 0
  9077.  dc.w bpl7pth
  9078. p7h
  9079.  dc.w 0
  9080.  dc.w bpl7ptl
  9081. p7l
  9082.  dc.w 0
  9083.  dc.w bpl8pth
  9084. p8h
  9085.  dc.w 0
  9086.  dc.w bpl8ptl
  9087. p8l
  9088.  dc.w 0
  9089.  
  9090.  
  9091.  dc.w ddfstart,$38
  9092.  dc.w ddfstop,$b8
  9093.  dc.w diwstart,$2c81
  9094.  dc.w diwstop,$2cc1
  9095.  
  9096.  dc.w bplcon0
  9097. Panelcon: dc.w $0211
  9098.  dc.w bpl1pth
  9099. p1h
  9100.  dc.w 0
  9101.  
  9102.  dc.w bpl1ptl
  9103. p1l
  9104.  dc.w 0
  9105.  
  9106.  
  9107.  dc.w $108,40*7
  9108.  dc.w $10a,40*7
  9109.  
  9110.  dc.w $ffff,$fffe
  9111.  
  9112.  dc.w $180,$fff
  9113.  
  9114.  
  9115.  dc.w $f801,$ff00
  9116.  dc.w col1,$50
  9117.  dc.w $f901,$ff00
  9118.  dc.w col1,$90
  9119.  dc.w $fa01,$ff00
  9120.  dc.w col1,$f0
  9121.  dc.w $fb01,$ff00
  9122.  dc.w col1,$f0
  9123.  dc.w $fc01,$ff00
  9124.  dc.w col1,$90
  9125.  dc.w $fd01,$ff00
  9126.  dc.w col1,$50
  9127.  
  9128.  dc.w $fe01,$ff00
  9129.  dc.w col1,$fff
  9130.  
  9131.  dc.w $ffdf,$fffe
  9132.  dc.w $a01,$ff00
  9133.  dc.w bplcon0,$201
  9134.  
  9135.  incbin "faces2cols"
  9136.  dc.w bpl1pth
  9137. f1h
  9138.  dc.w 0
  9139.  
  9140.  dc.w bpl1ptl
  9141. f1l
  9142.  dc.w 0
  9143.  
  9144.  dc.w bpl2pth
  9145. f2h
  9146.  dc.w 0
  9147.  
  9148.  dc.w bpl2ptl
  9149. f2l
  9150.  dc.w 0
  9151.  
  9152.  dc.w bpl3pth
  9153. f3h
  9154.  dc.w 0
  9155.  
  9156.  dc.w bpl3ptl
  9157. f3l
  9158.  dc.w 0
  9159.  
  9160.  dc.w bpl4pth
  9161. f4h
  9162.  dc.w 0
  9163.  dc.w bpl4ptl
  9164. f4l
  9165.  dc.w 0
  9166.  
  9167.  dc.w bpl5pth
  9168. f5h
  9169.  dc.w 0
  9170.  dc.w bpl5ptl
  9171. f5l
  9172.  dc.w 0
  9173.  
  9174.  dc.w $0c01,$ff00
  9175.  dc.w bplcon0,$5201
  9176.   
  9177.  dc.w $ffff,$fffe
  9178.  
  9179.  cnop 0,64
  9180. FacePlace:
  9181. ; ds.l 6*32*5
  9182.  
  9183. TEXTSCRN: dc.l 0
  9184.  
  9185. TEXTCOP:
  9186.  dc.w intreq,$8020
  9187.  
  9188.  dc.w spr0ptl
  9189. txs0l:
  9190.  dc.w 0
  9191.  dc.w spr0pth
  9192. txs0h:
  9193.  dc.w 0
  9194.  dc.w spr1ptl
  9195. txs1l:
  9196.  dc.w 0
  9197.  dc.w spr1pth
  9198. txs1h:
  9199.  dc.w 0
  9200.  dc.w spr2ptl
  9201. txs2l:
  9202.  dc.w 0
  9203.  dc.w spr2pth
  9204. txs2h:
  9205.  dc.w 0
  9206.  dc.w spr3ptl
  9207. txs3l:
  9208.  dc.w 0
  9209.  dc.w spr3pth
  9210. txs3h:
  9211.  dc.w 0
  9212.  dc.w spr4ptl
  9213. txs4l:
  9214.  dc.w 0
  9215.  dc.w spr4pth
  9216. txs4h:
  9217.  dc.w 0
  9218.  dc.w spr5ptl
  9219. txs5l:
  9220.  dc.w 0
  9221.  dc.w spr5pth
  9222. txs5h:
  9223.  dc.w 0
  9224.  dc.w spr6ptl
  9225. txs6l:
  9226.  dc.w 0
  9227.  dc.w spr6pth
  9228. txs6h:
  9229.  dc.w 0
  9230.  dc.w spr7ptl
  9231. txs7l:
  9232.  dc.w 0
  9233.  dc.w spr7pth
  9234. txs7h:
  9235.  dc.w 0
  9236.  
  9237.  
  9238.  dc.w $10c,$0088
  9239.  
  9240.  dc.w $1fc,$f
  9241.  dc.w diwstart,$2c81    ; Top left corner of screen.
  9242.  dc.w diwstop,$2cc1     ; Bottom right corner of screen.
  9243.  dc.w ddfstart,$38      ; Data fetch start.
  9244.  dc.w ddfstop,$c8       ; Data fetch stop.
  9245.  
  9246.  dc.w bplcon0
  9247. TSCP:
  9248.  dc.w $9201
  9249.  
  9250.  dc.w $106,$c40
  9251.  
  9252.  dc.w col0,0
  9253.  dc.w col1
  9254. TXTCOLL:
  9255.  dc.w 0
  9256.  
  9257.  dc.w bpl1pth
  9258. TSPTh:
  9259.  dc.w 0
  9260.  dc.w bpl1ptl
  9261. TSPTl:
  9262.  dc.w 0
  9263.  
  9264.  dc.w $108,0
  9265.  dc.w $10a,0
  9266.  
  9267.  dc.w $ffff,$fffe
  9268.  
  9269. ********************************************
  9270. * Stuff you don't have to worry about yet. *
  9271. ********************************************
  9272.  
  9273. closeeverything:
  9274.  
  9275.  jsr mt_end
  9276.  
  9277.  move.l #nullcop,d0
  9278. ; move.l old,d0
  9279.  
  9280.  move.l #$dff000,a6
  9281.  move.l d0,$dff080     ; Restore old copper list.
  9282.  move.w d0,ocl
  9283.  swap d0
  9284.  move.w d0,och
  9285.  
  9286.  move.w #$8020,dmacon(a6)
  9287.  move.w #$f,dmacon(a6)
  9288.  move.l saveit,$6c.w
  9289.  move.l OLDKINT,$68.w
  9290.  move.w saveinters,d0
  9291.  or.w #$c000,d0
  9292.  move.w d0,intena(a6)
  9293.  clr.w $dff0a8
  9294.  clr.w $dff0b8
  9295.  clr.w $dff0c8
  9296.  clr.w $dff0d8
  9297.  
  9298. ; move.w #3,d0
  9299. ;nonewvbl
  9300. ; btst #5,intreqrl(a6)
  9301. ; beq.s nonewvbl
  9302. ; move.w #$20,intreq(a6)
  9303. ; dbra d0,nonewvbla
  9304.  
  9305. ; move.l oldview,a1
  9306. ; move.l a1,d0
  9307. ; move.l gfxbase,a6
  9308. ; jsr -$de(a6)
  9309.  
  9310. ; cmp.b #'s',mors
  9311. ; beq.s leaveold
  9312. ; move.w #$f8e,$dff1dc
  9313. ;leaveold:
  9314.  
  9315.  jsr RELEASELEVELMEM
  9316.  jsr RELEASESCRNMEM
  9317.  
  9318.  move.l #0,d0
  9319.  
  9320.  rts
  9321.  
  9322.  
  9323.  
  9324. intbase: dc.l 0
  9325. gfxbase: dc.l 0
  9326. oldview: dc.l 0
  9327.  
  9328. stuff:
  9329.  
  9330.     PRSDL
  9331.     Lea    gfxname(pc),a1    
  9332.     Moveq.l    #0,d0
  9333.     Move.l    $4.w,a6    
  9334.     Jsr    -$228(a6)
  9335.     add.w d1,RVAL1
  9336.     Move.l     d0,gfxbase
  9337.     Move.l    d0,a6                Use As Base Reg
  9338.     Move.l    34(a6),oldview
  9339.     move.l 38(a6),old
  9340.     rts
  9341.  
  9342. gfxname dc.b "graphics.library",0
  9343.  even
  9344. INTUNAME    dc.b    "intuition.library",0
  9345.  
  9346.  even
  9347.  
  9348.  
  9349.  cnop 0,64
  9350.  
  9351. Panel:
  9352.  dc.l 0
  9353.  
  9354. TimerScr: 
  9355. ;ds.b 40*64
  9356.  
  9357. scrntab:
  9358.  ds.b 16
  9359. val SET 32
  9360.  REPT 96
  9361.  dc.b val,val,val
  9362. val SET val+1
  9363.  ENDR
  9364.  ds.b 16
  9365.  
  9366. smallscrntab:
  9367. val SET 32
  9368.  REPT 96
  9369.  dc.b val,val
  9370. val SET val+1
  9371.  ENDR
  9372.  
  9373.  cnop 0,64
  9374. scrn:
  9375.  
  9376.  dcb.l 8,$33333333
  9377.  dc.l 0
  9378.  dc.l 0
  9379.  
  9380.  dcb.l 8,$0f0f0f0f
  9381.  dc.l 0
  9382.  dc.l 0
  9383.  
  9384.  dcb.l 8,$00ff00ff
  9385.  dc.l 0
  9386.  dc.l 0
  9387.  
  9388.  dcb.l 8,$0000ffff
  9389.  dc.l 0
  9390.  dc.l 0
  9391.  
  9392.  dc.l 0,-1,0,-1,0,-1,0,-1
  9393.  dc.l 0
  9394.  dc.l 0
  9395.  
  9396.  dc.l -1,-1,0,0,-1,-1,0,0
  9397.  dc.l 0
  9398.  dc.l 0
  9399.  
  9400.  dc.l 0,0,-1,-1,-1,-1,-1,-1
  9401.  dc.l 0
  9402.  dc.l 0
  9403.  
  9404. NumTimes: dc.l 0
  9405. TimeCount: dc.l 0
  9406. oldtime: dc.l 0
  9407. counting: dc.b 0
  9408. oktodisplay: dc.b 0
  9409.  
  9410. INITTIMER:
  9411.  move.l #0,TimeCount
  9412.  move.l #0,NumTimes
  9413.  rts
  9414.  
  9415. STARTCOUNT:
  9416.  move.l d0,-(a7)
  9417.  move.l $dff004,d0
  9418.  and.l #$1ffff,d0
  9419.  move.l d0,oldtime
  9420.  st counting
  9421.  move.l (a7)+,d0
  9422.  rts
  9423.  
  9424. STOPCOUNT:
  9425.  move.l d0,-(a7)
  9426.  move.l $dff004,d0
  9427.  and.l #$1ffff,d0
  9428.  
  9429.  sub.l oldtime,d0
  9430.  cmp.l #-256,d0
  9431.  bge.s okcount
  9432.  add.l #313*256,d0
  9433. okcount:
  9434.  add.l d0,TimeCount
  9435.  addq.l #1,NumTimes
  9436.  clr.b counting
  9437.  move.l (a7)+,d0
  9438.  rts
  9439.  
  9440. STOPCOUNTNOADD:
  9441.  move.l d0,-(a7)
  9442.  move.l $dff004,d0
  9443.  and.l #$1ffff,d0
  9444.  
  9445.  sub.l oldtime,d0
  9446.  cmp.l #-256,d0
  9447.  bge.s okcount2
  9448.  add.l #313*256,d0
  9449. okcount2:
  9450.  add.l d0,TimeCount
  9451.  clr.b counting
  9452.  move.l (a7)+,d0
  9453.  rts
  9454.  
  9455. maxbot: dc.w 0
  9456. tstneg: dc.l 0
  9457.  
  9458. STOPTIMER:
  9459.  st oktodisplay
  9460.  rts
  9461.  
  9462. digits: incbin "numbers.inc"
  9463.  
  9464.  
  9465.  Section Sounds,CODE_C
  9466.  
  9467. nullcop:
  9468.  dc.w $180,0
  9469.  dc.w $100,$0
  9470.  dc.w $ffff,$fffe
  9471.  
  9472. Scream:
  9473. ; incbin "ab3:sounds/Scream"
  9474. ; ds.w 100
  9475. EndScream:
  9476. LowScream:
  9477. ; incbin "ab3:sounds/LowScream"
  9478. ; ds.w 100
  9479. EndLowScream:
  9480. BaddieGun:
  9481. ; incbin "ab3:sounds/BaddieGun"
  9482. EndBaddieGun:
  9483. bass:
  9484. ; incbin "ab3:sounds/backbass+drum"
  9485. bassend:
  9486. Shoot:
  9487. ; incbin "ab3:sounds/fire!"
  9488. EndShoot:
  9489. Munch:
  9490. ; incbin "ab3:sounds/munch"
  9491. EndMunch:
  9492. PooGun:
  9493. ; incbin "ab3:sounds/shoot.dm"
  9494. EndPooGun:
  9495. Collect:
  9496. ; incbin "ab3:sounds/collect"
  9497. EndCollect:
  9498. DoorNoise:
  9499. ; incbin "ab3:sounds/newdoor"
  9500. EndDoorNoise:
  9501. Stomp:
  9502. ; incbin "ab3:sounds/footstep3"
  9503. EndStomp:
  9504. SwitchNoise:
  9505. ; incbin "ab3:sounds/switch"
  9506. EndSwitch:
  9507. Reload:
  9508. ; incbin "ab3:sounds/switch1.SFX"
  9509. EndReload:
  9510. NoAmmo:
  9511. ; incbin "ab3:sounds/noammo"
  9512. EndNoAmmo:
  9513. Splotch:
  9514. ; incbin "ab3:sounds/splotch"
  9515. EndSplotch:
  9516. SplatPop:
  9517. ; incbin "ab3:sounds/splatpop"
  9518. EndSplatPop:
  9519. Boom:
  9520. ; incbin "ab3:sounds/boom"
  9521. EndBoom:
  9522. Hiss:
  9523. ; incbin "ab3:sounds/newhiss"
  9524. EndHiss:
  9525. Howl1:
  9526. ; incbin "ab3:sounds/howl1"
  9527. EndHowl1:
  9528. Howl2:
  9529. ; incbin "ab3:sounds/howl2"
  9530. EndHowl2:
  9531. Pant:
  9532. ; incbin "ab3:sounds/pant"
  9533. EndPant:
  9534. Whoosh:
  9535. ; incbin "ab3:sounds/whoosh"
  9536. EndWhoosh:
  9537. ROAR:
  9538. ; incbin "ab3:sounds/bigscream"
  9539. EndROAR
  9540. whoosh:
  9541. ; incbin "ab3:sounds/flame"
  9542. Endwhoosh:
  9543.  SECTION music,code_c
  9544.  
  9545. UseAllChannels: dc.w 0
  9546.  
  9547. mt_init:move.l    mt_data,a0
  9548.     move.l    a0,a1
  9549.     add.l    #$3b8,a1
  9550.     moveq    #$7f,d0
  9551.     moveq    #0,d1
  9552. mt_loop:move.l    d1,d2
  9553.     subq.w    #1,d0
  9554. mt_lop2:move.b    (a1)+,d1
  9555.     cmp.b    d2,d1
  9556.     bgt.s    mt_loop
  9557.     dbf    d0,mt_lop2
  9558.     addq.b    #1,d2
  9559.  
  9560.     lea    mt_samplestarts(pc),a1
  9561.     asl.l    #8,d2
  9562.     asl.l    #2,d2
  9563.     add.l    #$43c,d2
  9564.     add.l    a0,d2
  9565.     move.l    d2,a2
  9566.     moveq    #$1e,d0
  9567. mt_lop3:clr.l    (a2)
  9568.     move.l    a2,(a1)+
  9569.     moveq    #0,d1
  9570.     move.w    42(a0),d1
  9571.     asl.l    #1,d1
  9572.     add.l    d1,a2
  9573.     add.l    #$1e,a0
  9574.     dbf    d0,mt_lop3
  9575.  
  9576.     or.b    #$2,$bfe001
  9577.     move.b    #$6,mt_speed
  9578.     clr.w    $dff0a8
  9579.     clr.w    $dff0b8
  9580.     clr.w    $dff0c8
  9581.     clr.w    $dff0d8
  9582.     clr.b    mt_songpos
  9583.     clr.b    mt_counter
  9584.     clr.w    mt_pattpos
  9585.     rts
  9586.  
  9587. mt_end:    clr.w    $dff0a8
  9588.     clr.w    $dff0b8
  9589.     clr.w    $dff0c8
  9590.     clr.w    $dff0d8
  9591.     move.w    #$f,$dff096
  9592.     rts
  9593.  
  9594. mt_music:
  9595.     movem.l    d0-d4/a0-a3/a5-a6,-(a7)
  9596.     move.l    mt_data,a0
  9597.     addq.b    #$1,mt_counter
  9598.     move.b    mt_counter,D0
  9599.     cmp.b    mt_speed,D0
  9600.     blt.s    mt_nonew
  9601.     clr.b    mt_counter
  9602.     bra    mt_getnew
  9603.  
  9604. mt_nonew:
  9605.     lea    mt_voice1(pc),a6
  9606.     lea    $dff0a0,a5
  9607.     bsr    mt_checkcom
  9608.     lea    mt_voice2(pc),a6
  9609.     lea    $dff0b0,a5
  9610.     bsr    mt_checkcom
  9611.     tst.b UseAllChannels
  9612.     beq mt_endr
  9613.      lea    mt_voice3(pc),a6
  9614.     lea    $dff0c0,a5
  9615.     bsr    mt_checkcom
  9616.     lea    mt_voice4(pc),a6
  9617.     lea    $dff0d0,a5
  9618.     bsr    mt_checkcom
  9619.     bra    mt_endr
  9620.  
  9621. mt_arpeggio:
  9622.     moveq    #0,d0
  9623.     move.b    mt_counter,d0
  9624.     divs    #$3,d0
  9625.     swap    d0
  9626.     cmp.w    #$0,d0
  9627.     beq.s    mt_arp2
  9628.     cmp.w    #$2,d0
  9629.     beq.s    mt_arp1
  9630.  
  9631.     moveq    #0,d0
  9632.     move.b    $3(a6),d0
  9633.     lsr.b    #4,d0
  9634.     bra.s    mt_arp3
  9635. mt_arp1:moveq    #0,d0
  9636.     move.b    $3(a6),d0
  9637.     and.b    #$f,d0
  9638.     bra.s    mt_arp3
  9639. mt_arp2:move.w    $10(a6),d2
  9640.     bra.s    mt_arp4
  9641. mt_arp3:asl.w    #1,d0
  9642.     moveq    #0,d1
  9643.     move.w    $10(a6),d1
  9644.     lea    mt_periods(pc),a0
  9645.     moveq    #$24,d7
  9646. mt_arploop:
  9647.     move.w    (a0,d0.w),d2
  9648.     cmp.w    (a0),d1
  9649.     bge.s    mt_arp4
  9650.     addq.l    #2,a0
  9651.     dbf    d7,mt_arploop
  9652.     rts
  9653. mt_arp4:move.w    d2,$6(a5)
  9654.     rts
  9655.  
  9656. mt_getnew:
  9657.     move.l    mt_data,a0
  9658.     move.l    a0,a3
  9659.     move.l    a0,a2
  9660.     add.l    #$c,a3
  9661.     add.l    #$3b8,a2
  9662.     add.l    #$43c,a0
  9663.  
  9664.     moveq    #0,d0
  9665.     move.l    d0,d1
  9666.     move.b    mt_songpos,d0
  9667.     move.b    (a2,d0.w),d1
  9668.     asl.l    #8,d1
  9669.     asl.l    #2,d1
  9670.     add.w    mt_pattpos,d1
  9671.     clr.w    mt_dmacon
  9672.  
  9673.     lea    $dff0a0,a5
  9674.     lea    mt_voice1(pc),a6
  9675.     bsr    mt_playvoice
  9676.     lea    $dff0b0,a5
  9677.     lea    mt_voice2(pc),a6
  9678.     bsr    mt_playvoice
  9679.     tst.b UseAllChannels
  9680.     beq mt_setdma
  9681.     lea    $dff0c0,a5
  9682.     lea    mt_voice3(pc),a6
  9683.     bsr    mt_playvoice
  9684.     lea    $dff0d0,a5
  9685.     lea    mt_voice4(pc),a6
  9686.     bsr    mt_playvoice
  9687.     bra    mt_setdma
  9688.  
  9689. PROTCALC:
  9690. ;    include "ab3:source/protcalc.s"
  9691.     incbin "ab3:includes/protcalc.bin"
  9692. ENDPROTCALC:
  9693.  
  9694. mt_playvoice:
  9695.     move.l    (a0,d1.l),(a6)
  9696.     addq.l    #4,d1
  9697.     moveq    #0,d2
  9698.     move.b    $2(a6),d2
  9699.     and.b    #$f0,d2
  9700.     lsr.b    #4,d2
  9701.     move.b    (a6),d0
  9702.     and.b    #$f0,d0
  9703.     or.b    d0,d2
  9704.     tst.b    d2
  9705.     beq.s    mt_setregs
  9706.     moveq    #0,d3
  9707.     lea    mt_samplestarts(pc),a1
  9708.     move.l    d2,d4
  9709.     subq.l    #$1,d2
  9710.     asl.l    #2,d2
  9711.     mulu    #$1e,d4
  9712.     move.l    (a1,d2.l),$4(a6)
  9713.     move.w    (a3,d4.l),$8(a6)
  9714.     move.w    $2(a3,d4.l),$12(a6)
  9715.     move.w    $4(a3,d4.l),d3
  9716.     tst.w    d3
  9717.     beq.s    mt_noloop
  9718.     move.l    $4(a6),d2
  9719.     asl.w    #1,d3
  9720.     add.l    d3,d2
  9721.     move.l    d2,$a(a6)
  9722.     move.w    $4(a3,d4.l),d0
  9723.     add.w    $6(a3,d4.l),d0
  9724.     move.w    d0,8(a6)
  9725.     move.w    $6(a3,d4.l),$e(a6)
  9726.     move.w    $12(a6),d0
  9727.     asr.w #2,d0
  9728.     move.w d0,$8(a5)
  9729.     bra.s    mt_setregs
  9730. mt_noloop:
  9731.     move.l    $4(a6),d2
  9732.     add.l    d3,d2
  9733.     move.l    d2,$a(a6)
  9734.     move.w    $6(a3,d4.l),$e(a6)
  9735.     move.w    $12(a6),d0
  9736.     asr.w #2,d0
  9737.     move.w d0,$8(a5)
  9738. mt_setregs:
  9739.     move.w    (a6),d0
  9740.     and.w    #$fff,d0
  9741.     beq    mt_checkcom2
  9742.     move.b    $2(a6),d0
  9743.     and.b    #$F,d0
  9744.     cmp.b    #$3,d0
  9745.     bne.s    mt_setperiod
  9746.     bsr    mt_setmyport
  9747.     bra    mt_checkcom2
  9748. mt_setperiod:
  9749.     move.w    (a6),$10(a6)
  9750.     and.w    #$fff,$10(a6)
  9751.     move.w    $14(a6),d0
  9752.     move.w    d0,$dff096
  9753.     clr.b    $1b(a6)
  9754.  
  9755.     move.l    $4(a6),(a5)
  9756.     move.w    $8(a6),$4(a5)
  9757.     move.w    $10(a6),d0
  9758.     and.w    #$fff,d0
  9759.     move.w    d0,$6(a5)
  9760.     move.w    $14(a6),d0
  9761.     or.w    d0,mt_dmacon
  9762.     bra    mt_checkcom2
  9763.  
  9764. mt_setdma:
  9765.      move.w #250,d0
  9766. mt_wait:
  9767.      add.w #1,testchip
  9768.      dbra d0,mt_wait
  9769.     move.w    mt_dmacon,d0
  9770.     or.w    #$8000,d0
  9771.     and.w #%1111111111110011,d0
  9772.     move.w    d0,$dff096
  9773.     move.w #250,d0
  9774. mt_wait2:
  9775.     add.w #1,testchip
  9776.     dbra    d0,mt_wait2
  9777.     lea    $dff000,a5
  9778.     tst.b UseAllChannels
  9779.     beq.s noall
  9780.     lea    mt_voice4(pc),a6
  9781.     move.l    $a(a6),$d0(a5)
  9782.     move.w    $e(a6),$d4(a5)
  9783.     lea    mt_voice3(pc),a6
  9784.     move.l    $a(a6),$c0(a5)
  9785.     move.w    $e(a6),$c4(a5)
  9786. noall:
  9787.     lea    mt_voice2(pc),a6
  9788.     move.l    $a(a6),$b0(a5)
  9789.     move.w    $e(a6),$b4(a5)
  9790.     lea    mt_voice1(pc),a6
  9791.     move.l    $a(a6),$a0(a5)
  9792.     move.w    $e(a6),$a4(a5)
  9793.  
  9794.     add.w    #$10,mt_pattpos
  9795.     cmp.w    #$400,mt_pattpos
  9796.     bne.s    mt_endr
  9797. mt_nex:    clr.w    mt_pattpos
  9798.     clr.b    mt_break
  9799.     addq.b    #1,mt_songpos
  9800.     and.b    #$7f,mt_songpos
  9801.     move.b    mt_songpos,d1
  9802. ;    cmp.b    mt_data+$3b6,d1
  9803. ;    bne.s    mt_endr
  9804. ;    move.b    mt_data+$3b7,mt_songpos
  9805. mt_endr:tst.b    mt_break
  9806.     bne.s    mt_nex
  9807.     movem.l    (a7)+,d0-d4/a0-a3/a5-a6
  9808.     rts
  9809.  
  9810. mt_setmyport:
  9811.     move.w    (a6),d2
  9812.     and.w    #$fff,d2
  9813.     move.w    d2,$18(a6)
  9814.     move.w    $10(a6),d0
  9815.     clr.b    $16(a6)
  9816.     cmp.w    d0,d2
  9817.     beq.s    mt_clrport
  9818.     bge.s    mt_rt
  9819.     move.b    #$1,$16(a6)
  9820.     rts
  9821. mt_clrport:
  9822.     clr.w    $18(a6)
  9823. mt_rt:    rts
  9824.  
  9825. CODESTORE: dc.l 0
  9826.  
  9827. mt_myport:
  9828.     move.b    $3(a6),d0
  9829.     beq.s    mt_myslide
  9830.     move.b    d0,$17(a6)
  9831.     clr.b    $3(a6)
  9832. mt_myslide:
  9833.     tst.w    $18(a6)
  9834.     beq.s    mt_rt
  9835.     moveq    #0,d0
  9836.     move.b    $17(a6),d0
  9837.     tst.b    $16(a6)
  9838.     bne.s    mt_mysub
  9839.     add.w    d0,$10(a6)
  9840.     move.w    $18(a6),d0
  9841.     cmp.w    $10(a6),d0
  9842.     bgt.s    mt_myok
  9843.     move.w    $18(a6),$10(a6)
  9844.     clr.w    $18(a6)
  9845. mt_myok:move.w    $10(a6),$6(a5)
  9846.     rts
  9847. mt_mysub:
  9848.     sub.w    d0,$10(a6)
  9849.     move.w    $18(a6),d0
  9850.     cmp.w    $10(a6),d0
  9851.     blt.s    mt_myok
  9852.     move.w    $18(a6),$10(a6)
  9853.     clr.w    $18(a6)
  9854.     move.w    $10(a6),$6(a5)
  9855.     rts
  9856.  
  9857. mt_vib:    move.b    $3(a6),d0
  9858.     beq.s    mt_vi
  9859.     move.b    d0,$1a(a6)
  9860.  
  9861. mt_vi:    move.b    $1b(a6),d0
  9862.     lea    mt_sin(pc),a4
  9863.     lsr.w    #$2,d0
  9864.     and.w    #$1f,d0
  9865.     moveq    #0,d2
  9866.     move.b    (a4,d0.w),d2
  9867.     move.b    $1a(a6),d0
  9868.     and.w    #$f,d0
  9869.     mulu    d0,d2
  9870.     lsr.w    #$6,d2
  9871.     move.w    $10(a6),d0
  9872.     tst.b    $1b(a6)
  9873.     bmi.s    mt_vibmin
  9874.     add.w    d2,d0
  9875.     bra.s    mt_vib2
  9876. mt_vibmin:
  9877.     sub.w    d2,d0
  9878. mt_vib2:move.w    d0,$6(a5)
  9879.     move.b    $1a(a6),d0
  9880.     lsr.w    #$2,d0
  9881.     and.w    #$3c,d0
  9882.     add.b    d0,$1b(a6)
  9883.     rts
  9884.  
  9885. mt_nop:    move.w    $10(a6),$6(a5)
  9886.     rts
  9887.  
  9888.  
  9889. mt_checkcom:
  9890.     move.w    $2(a6),d0
  9891.     and.w    #$fff,d0
  9892.     beq.s    mt_nop
  9893.     move.b    $2(a6),d0
  9894.     and.b    #$f,d0
  9895.     tst.b    d0
  9896.     beq    mt_arpeggio
  9897.     cmp.b    #$1,d0
  9898.     beq.s    mt_portup
  9899.     cmp.b    #$2,d0
  9900.     beq    mt_portdown
  9901.     cmp.b    #$3,d0
  9902.     beq    mt_myport
  9903.     cmp.b    #$4,d0
  9904.     beq    mt_vib
  9905.     move.w    $10(a6),$6(a5)
  9906.     cmp.b    #$a,d0
  9907.     beq.s    mt_volslide
  9908.     rts
  9909.  
  9910. mt_volslide:
  9911.     moveq    #0,d0
  9912.     move.b    $3(a6),d0
  9913.     lsr.b    #4,d0
  9914.     tst.b    d0
  9915.     beq.s    mt_voldown
  9916.     add.w    d0,$12(a6)
  9917.     cmp.w    #$40,$12(a6)
  9918.     bmi.s    mt_vol2
  9919.     move.w    #$40,$12(a6)
  9920. mt_vol2:move.w    $12(a6),d0
  9921.     asr.w #2,d0
  9922.     move.w d0,$8(a5)
  9923.     rts
  9924.  
  9925. mt_voldown:
  9926.     moveq    #0,d0
  9927.     move.b    $3(a6),d0
  9928.     and.b    #$f,d0
  9929.     sub.w    d0,$12(a6)
  9930.     bpl.s    mt_vol3
  9931.     clr.w    $12(a6)
  9932. mt_vol3:move.w    $12(a6),d0
  9933.     asr.w #2,d0
  9934.     move.w d0,$8(a5)
  9935.     rts
  9936.  
  9937. mt_portup:
  9938.     moveq    #0,d0
  9939.     move.b    $3(a6),d0
  9940.     sub.w    d0,$10(a6)
  9941.     move.w    $10(a6),d0
  9942.     and.w    #$fff,d0
  9943.     cmp.w    #$71,d0
  9944.     bpl.s    mt_por2
  9945.     and.w    #$f000,$10(a6)
  9946.     or.w    #$71,$10(a6)
  9947. mt_por2:move.w    $10(a6),d0
  9948.     and.w    #$fff,d0
  9949.     move.w    d0,$6(a5)
  9950.     rts
  9951.  
  9952. mt_portdown:
  9953.     clr.w    d0
  9954.     move.b    $3(a6),d0
  9955.     add.w    d0,$10(a6)
  9956.     move.w    $10(a6),d0
  9957.     and.w    #$fff,d0
  9958.     cmp.w    #$358,d0
  9959.     bmi.s    mt_por3
  9960.     and.w    #$f000,$10(a6)
  9961.     or.w    #$358,$10(a6)
  9962. mt_por3:move.w    $10(a6),d0
  9963.     and.w    #$fff,d0
  9964.     move.w    d0,$6(a5)
  9965.     rts
  9966.  
  9967. mt_checkcom2:
  9968.     move.b    $2(a6),d0
  9969.     and.b    #$f,d0
  9970.     cmp.b    #$e,d0
  9971.     beq.s    mt_setfilt
  9972.     cmp.b    #$d,d0
  9973.     beq.s    mt_pattbreak
  9974.     cmp.b    #$b,d0
  9975.     beq.s    mt_posjmp
  9976.     cmp.b    #$c,d0
  9977.     beq.s    mt_setvol
  9978.     cmp.b    #$f,d0
  9979.     beq.s    mt_setspeed
  9980.     rts
  9981.  
  9982. mt_setfilt:
  9983.     move.b    $3(a6),d0
  9984.     and.b    #$1,d0
  9985.     asl.b    #$1,d0
  9986.     and.b    #$fd,$bfe001
  9987.     or.b    d0,$bfe001
  9988.     rts
  9989. mt_pattbreak:
  9990.     not.b    mt_break
  9991.     rts
  9992. mt_posjmp:
  9993.     st reachedend
  9994.     move.b    $3(a6),d0
  9995.     subq.b    #$1,d0
  9996.     move.b    d0,mt_songpos
  9997.     not.b    mt_break
  9998.     rts
  9999. mt_setvol:
  10000.     cmp.b    #$40,$3(a6)
  10001.     ble.s    mt_vol4
  10002.     move.b    #$40,$3(a6)
  10003. mt_vol4:move.b    $3(a6),d0
  10004.     asr.w #2,d0
  10005.     move.w d0,$8(a5)
  10006.     rts
  10007. mt_setspeed:
  10008.     cmp.b    #$1f,$3(a6)
  10009.     ble.s    mt_sets
  10010.     move.b    #$1f,$3(a6)
  10011. mt_sets:move.b    $3(a6),d0
  10012.     beq.s    mt_rts2
  10013.     move.b    d0,mt_speed
  10014.     clr.b    mt_counter
  10015. mt_rts2:rts
  10016.  
  10017. mt_sin:
  10018.  DC.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  10019.  DC.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  10020.  
  10021. mt_periods:
  10022.  DC.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  10023.  DC.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  10024.  DC.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  10025.  DC.w $007f,$0078,$0071,$0000,$0000
  10026.  
  10027. reachedend: dc.b 0
  10028. mt_speed:    DC.b    6
  10029. mt_songpos:    DC.b    0
  10030. mt_pattpos:    DC.w    0
  10031. mt_counter:    DC.b    0
  10032.  
  10033. mt_break:    DC.b    0
  10034. mt_dmacon:    DC.w    0
  10035. mt_samplestarts:DS.L    $1f
  10036. mt_voice1:    DS.w    10
  10037.         DC.w    1
  10038.         DS.w    3
  10039. mt_voice2:    DS.w    10
  10040.         DC.w    2
  10041.         DS.w    3
  10042. mt_voice3:    DS.w    10
  10043.         DC.w    4
  10044.         DS.w    3
  10045. mt_voice4:    DS.w    10
  10046.         DC.w    8
  10047.         DS.w    3
  10048.  
  10049. testchip: dc.w 0
  10050.  
  10051. ;/* End of File */
  10052. mt_data: dc.l 0
  10053. tstchip: dc.l 0
  10054.  include "SERIAL_NIGHTMARE"
  10055.  
  10056. ingame:
  10057. ; incbin "ab3:includes/ingame"
  10058. gameover: incbin "ab3:includes/gameover"
  10059. welldone: incbin "ab3:includes/welldone"
  10060.